var ajaxManager = $.manageAjax({manageType: 'queue', maxReq: 2, blockSameRequest: true}); 
function load(){
	$.ajaxSetup({
	  url: 		"ajax/ajax.php",
	  global: 	false,
	  type: 	"POST",
	  dataType:	'json'
	});
}
/*************************************************************************************************/
	/**
	*@desc message box
	*@param string textMsg
	@author dhiraj
	**/
/*************************************************************************************************/
function msg(textMsg)
{
	if(textMsg!='')
	{
		var windowW=$('html').width();
		var windowH=$('html').height();
	
		 if(textMsg!='preloader')
		 {
		$('body').append('<div  id="msg" style="width:'+windowW+'px;position:absolute;top:0px;height:'+windowH+		'px;z-index:9999"><div id="msgbox"><div id=\'msgContent\'>'+textMsg+'</div><div id=\'closemsg\'>X</div></div></div>');
		
	$msgbox='#msgbox';
	
		
			$('#closemsg').click(function()
			{
			$('#msg').fadeOut(1000,function(){$(this).remove();})
			});
			
		 }
		 else
			{
				$('body').append('<div  id="msg" style="width:'+windowW+'px;position:absolute;top:0px;height:'+windowH+	'px;z-index:9999"><img src="images/box/loading.gif" id="loadimg" style="background:#FFF"/></div>');
	
			$msgbox='#loadimg'
				
			}
		msgL=((windowW-$($msgbox).width())/2) + 'px';
		msgT=(windowH-$($msgbox).height())/2 +'px';
		$($msgbox).css('top',msgT).css('left',msgL);
		$($msgbox).addClass('absolute').animate({ 
												  opacity:1
												  },1500);
		
	}
	
}
/*************************************************************************************************/
	/**
	@author dhiraj
	@desc live validation
	@param string errorClass set  errorClass to dom element
	@param String language set language of the error
	@param String trigger  on which  events should error be triggered
	**/	
/*************************************************************************************************/
(function($)
		  {
		  $.fn.liveValidation 	=	function(options)
			  {
				  var	defaults	=  {
										errorClass	:	'liveError',
										spanError   :	'spanError',
										language	:   'english',
										trigger     :	'keyup',
										task		:	'add',
										url			:	'ajax/ajax.php'
										};
				  var settings 	 =  $.extend({}, defaults, options); 					
				  $this			 = 	this;
				  $fields         =	$($this).formToArray();
				
				 $.each($fields,function($index,$fieldObject,event)
											{
												//alert($fieldObject.name);
												$element    =    '#' + $fieldObject.name;																                                                $($element).bind(settings.trigger,function(event){																														 																validator(event,this,false)
																																																											 				 												 });	
											});
				  /**
				  * @desc validator body
				  **/
				  function ifnotvalide(value,pattern)
				  {
					  	
					  	return value.search(pattern)==-1?true:false;
				  }
				  /**
				  *@desc add or remove error class
				  **/
				  function toggleError(addError,$element,$message)
				  {
					 $parent		=		  $($element).parent();
					
					 if($($parent).children('.'+settings.spanError).length>-1)
						 {
							 $($parent).children('.'+settings.spanError).remove();
							
						 }
					 if(addError)
					 {
						 
						 $($element).addClass(settings.errorClass);
						 $($parent).append('<span class='+settings.spanError+'>'+$message+'</span>');
						 
						 
					 }
					 else
					 {
							 $($element).removeClass(settings.errorClass);
							 

					 }					  
				  }
				  function validator(event,$element,$required)
				  {
					
					  $type ='';
					  $value    	=		  $($element).val();
					  $valuelen		=		  $value.length	
					  
					  if($($element).attr('rel')!='undefined' && $($element).attr('rel')!='')
					  {
					  	$type     	=         $($element).attr('rel').split('.')[0];
						$errorIndex	=		  0;
					  	 if($required)
						 {
							if($($element).attr('rel').split('.')[0]!='undefined' && $($element).attr('rel').split('.')[1]=='*')
							{
								$valuelen	=1;
								$errorIndex	=1;
							}
							else
							{
									$type= 'undefined';
							}
							
						 }
					  }
						
					  if($valuelen && $($element).attr('rel')!='')
					  {
						  
						  $label		=		  $($element).parent().children('label').html().split('<span')[0];
						  
						  $errLang		=		  new Array();
						  $errLang['english']		=		  new Array();
						  $errLang['french']		=		  new Array();
						  $errLang['english'][0]	= 		'Invalid '+ $label;
						  $errLang['english'][1]	= 		'Required Field '+$label;
						  $errLang['french'][0]		= 		'Champs '+$label+' non valid';
						  $errLang['french'][1]		= 		'Champs '+$label + 'requis';					  
						  if (typeof $type != 'undefined')
							  switch($type)
							  {
									case 'text':
									{
										 pattern = /^[a-zA-Z\s]+$/;	
										 toggleError(ifnotvalide($value ,pattern),$element,$errLang[settings.language][$errorIndex]);
										 break;
										
									}
									case 'numeric':
									{
										 pattern = /^[0-9\s]+$/;	
										 toggleError(ifnotvalide($value ,pattern),$element,$errLang[settings.language][$errorIndex])
										  break;

									}
									case 'email':
									{///(^[A-Za-z0-9\._\-]+@{1}[A-Za-z\.]+\.{1}([a-zA-Z\s]){2,4}$)/;
										 pattern = /(^[A-Za-z0-9\._\-]+@{1}[A-Za-z\.]+\.{1}([a-zA-Z\s]){2,5}$)/;	
										 toggleError(ifnotvalide($value ,pattern),$element,$errLang[settings.language][$errorIndex])
										  break;
									}
									case 'date':
									{
										 break;
									}
									case 'blank':
									{
											 break;
									}
									case 'alphanumeric':
									{
										 pattern = /^[0-9a-zA-Z\s@\._\-]+$/;	
										 toggleError(ifnotvalide($value ,pattern),$element,$errLang[settings.language][$errorIndex])
										  break;
									}
									case 'currency':
									{
											 break;
									}
									default:
									{
										 break;
									}
							  }//end of check of switch
					  }// end check of value size
				  }// end of function validation
				/** bining submit function**/
				$($this).bind('submit',function(event)
											   {
												   	$fields         =	$($this).formToArray();
												    $.each($fields,function($index,$fieldObject,event)	
																			{
																				$elem	= '#' + $fieldObject.name;
																				
																				validator(event,$elem,true);
																				
																			});
													$erroC	='.'+settings.spanError;
											//set <0 to disable
													if($($erroC).length>0)
													{
														return false
													}
													else
													{
														msg('preloader');	
														$data	=	$($this).serializeArray();
														var $class	=	 new Object();
														$class.name	= 	'class';
														$class.value	=	$($this).attr('id');
														var $task	=   new Object();
														$task.name	=	'task';
														$task.value	=	settings.task;
														$data.push($task);
														$data.push($class);
															ajaxManager.add({ 
															cache:		true,	
															data:		$data,
															url: 		settings.url,
															dataType:	'json',
															type: 	"POST",
															success: function(json_array, status) { 
																$('form').resetForm();
																callback(json_array,status);
															}
															
														});
															
														return false;
													}
											   });
					return this;	
			  }
	
		  })(jQuery); 
/*************************************************************************************************/
	/**
	@author dhiraj
	@desc cotrollor
	@param array json
	**/	
/*************************************************************************************************/
function callback(jsonArray,status)
{
		
		if($('#msg').length>0)
		{
			$('#msg').remove();	
		}
		$data		=	jsonArray['data'];
		$element	=	'#'+jsonArray['element'];
		$action		=	jsonArray['action'];
		$result		=	jsonArray['result'];
		$js			=	jsonArray['js'];
		if($result	==1)
		{
			switch($action)
			{
					case 'message' :
					{
						msg($data);
						break;
					}
					case 'append':
					{
							break;
					}
					case 'remove':
					{
							msg($data);
							$($element).animate({opacity:0}).slideUp('slow');
							break;
					}
					default:
					{
							break;
					}
			}// end switch
		if($js!='')
		{
			
				eval($js);
		}
		}// end if
}// end fucntion

/**
@author dhiraj
@desc tooltip
@param boolean fadeEffect set if fade in efect is required
@param integer fadespeed set speed of fading
**/
(function($)
		{
			$.fn.tooltips=function(options)
			{
				var defaults = {  
								 fadeEffect : true,
								 fadespeed	:100,  
								 timeOut	:false

								};
				var settings = $.extend({}, defaults, options);   
				this.each(function()
						{
							var $this =$(this);
							if($(this).hasClass('tooltips'))
							{
								var $title=$(this).attr('title');
								
								$(this).attr('title','');
								$(this).hover(function(event)
									{
										
										$('<div id="tooltips" />').appendTo('body');
										$('#tooltips').append('<div class="tips_container" />');
										$('.tips_container').html($title);

										$('#tooltips').css(
											{
												position	:'absolute',
												top			:event.pageY+12,
												left		:event.pageX+12,
												zIndex		:1000,
												opacity		:0.5
											});
									},
									function()
									{
										if(settings.fadeEffect)
										{
											
											$('#tooltips').fadeOut(settings.fadespeed);
										}
										$('#tooltips').remove();	
									}
									);
							   }
									
							});
							$(this).mousemove(function(event)
							{
								$('#tooltips').css(
									{
										top			: event.pageY+10,
										left		:event.pageX+10,
										opacity		:1
									}
								)
								
							}
						);
						
						return this;	
						}

					})(jQuery);; 


