/**
 * @todo faire une classe pour le lib utilisable depuis partout en l'initialisant a la fin du fichier de la lib.
 *
 **/

//document.write('<script src="http://www.google.com/jsapi"> </script>');
//document.write('<script>google.load("jquery", "1.3.2");</script>');


/***************************************************/
//
// Objet point d'entree des autres objets
// il contient pas mal de methodes statiques 
//
/***************************************************/

function cellObject(_pSiteName){

	this.siteName = _pSiteName;

	//on force la propriété prototype a n'etre initialisée q'une seule fois
	if( typeof(cellObject.initialized == 'undefined') ){
		
	

	}//endif typeof


	/****************************/
	// methodes statiques
	/****************************/
	
	//fonction qui test si le parametre existe
	cellObject.isset= function(_pVar){
		if( typeof(_pVar) != 'undefined'){
			return true;
		}
		return false;
	}
	

	//fonction qui affiche le message passe en parametre	
	cellObject.displayMessage = function(_message){
		alert(_message);	
	}
	
	//fonction qui fait une verification sur le numero de telephone
	cellObject.checkNumTel = function(_numtel){
		var regex = new RegExp(/^(06|07)[0-9]{8}/gi);
		if(!regex.test(_numtel)){
			this.displayMessage('verifier le numero de telephone');			
			return false;
		}
		return true;
	}


	//fonction qui genere une image pour 
	//les pixels de tracking
	cellObject.TrackingPixel = function(tel, tracking_src){	
		
		tracking_image = new Image();
		tracking_image.src = tracking_src;

	}




	/**********************************************************************************************/
	//
	// @author : EL KHAMLICHI Rachid
	// @date : 18/03/2009
	// 
    // @params : - _identificatorType : type de selecteur (id , class, name)
	//			 - _elementIdentificator  : name of element 
	//			 - _effectId effect  to apply   
	// @comment : This function can manage kind of display
	// @comment-fr : Cette fonction permet de gerer les differents types d'affichage des elements
	// en leur appliquant des effets (par exemple / visible/invisible) transparence 
	//  
	//
	/**********************************************************************************************/


	
	cellObject.manageDisplayElements = function( _identificatorType , _elementIdentificator , _effectId){
		
		var ident = null;
		
		switch(_identificatorType){
			case 'id' : 
				ident = '#'+_elementIdentificator;
				break;
			case 'name' : 
				ident = _elementIdentificator;
				break;
			case 'class' : 
				ident = "."+_elementIdentificator;
				break;
				default : 
					throw("cellObject.manageDisplay::no element "+_elementIdentificator);
				break;	
		}
		
		switch(_effectId){
			
			case 'slide' : 
				
				if($(ident).is(":hidden")){
					$(ident).slideDown('slow');
				}else{
					$(ident).slideUp('slow');
    			}
				
				break;
			case 'hide-show' :
				if($(ident).is(":hidden")){
						$(ident).show();
				}else{
						$(ident).hide();
				}
		
				break;
				default :
					throw("Pas d'effets "); 
				break;	
			}
			
		}
		

}



function cellFormObject(_pSiteName , _pFormName){
	
	//on fait heriter
	cellObject.call(this, _pSiteName, _pFormName);
	this.formName = _pFormName;

	//fonction qui renvoi la valeur d'un element 
	// @params : 
	//  - _ptype (id, name, class)
	//  - _pname : nom de l'element
	//  - 
	
	this.getValue = function(_ptypelement , _ptype, _pname){
		
		//on recupere l'element dans le formulaire this.formName qui a l'identifiant de typ _ptype et de nom _pname
		var jurl =   $('#'+this.formName).find(_ptypelement+"["+_ptype+"='"+_pname+"']") ;
		
		switch(jurl.attr('type')){
			case 'checkbox' : 
					return((jurl.attr('checked') == true ) ? 1 : 0 );
				break;
			default  :
					return jurl.val();
				break;
		}
	
	};
		
	//fonction qui change un select en fonction d'un autre
	//todo a developper.
	this.changeSelect = function(_select_src, _select_dest, method, params, async){

				
		
	};		

}



/****************************************************/
//
// Objet qui gere les requetes ajax
//
// @params : 
//	- _pTarget : url destination
//  - _pMethode : la Methode (GET ou POST)
//
/***************************************************/

function cellAjaxObject(){
	
	

	//on force la propriété prototype a n'etre initialisée q'une seule fois
	if( typeof(cellAjaxObject.initialized == 'undefined') ){
	
		cellAjaxObject.prototype = {
			getHandler :  function(data){
        		alert('data '+data);
			}
		}
	}//endif typeof


/**************************************************/
// fonction statiques de la classe sellAjaxObject //
/**************************************************/
	

	//fonction qui retourne les donnees renvoyé par
	//la requete get. 
	cellAjaxObject.getHandle = function(data){
			return data;
	}

	//un fonction qui fait une requete
	this.getAjax = function(target){
		$.get(target, function(data){cellAjaxObject.getHandle(data)});	
	};
		
	
	//une fonction qui fait une requete post
	this.post = function(_url , _data){
		$.post(_url, _data, function(){alert('data'+data);} );
	};
	
	//function which do a post and then update the div id in 3rd parameter.
	this.postUpdate = function(_url , _data, _divToUpdate, async){
		$.ajax({
			type : "POST",
			url : _url,
			data: _data,
			async : async,
			success : function(msg){
				$('#'+_divToUpdate).html(msg);
			}
		});	
	};


	//fonction qui fait un get vers une url et update le div defini 
	// en parametre
	this.getUpdate = function(_url , _divToUpdate, async){
		
		$.ajax({
			type  : "GET",
			url   : _url,
			async : async,
			success : function(msg){
				$('#'+_divToUpdate).html(msg);
			}
		});
	};

}


/**
 * Objet qui gere les queryString
 * Ajout/Suppression de parametre
 * Verification de la validite des parametres
 * 
 **/


function queryStringObject(){


	this.params = new Array();
	this.query = '';
	var co = new cellObject('kkomobile');	

	this.addParam = function(_param, _value){
		if(cellObject.isset(_param) && cellObject.isset(_value)){
			this.params[_param] = _value;
		}
	}

	this.getQuery = function(){
		var first = 1;
		
		for( param in this.params){
			if(first == 1 ){
				this.query += param+'='+this.params[param];
				first = 0;
			}else{
				this.query += '&'+param+'='+this.params[param];
			}
		}
		return this.query;
	}
}



/***************************************************************/
//
// Object which manage diaporama
//
//
// @params - diapoDiv : div containning the diaporama
//			- interval : interval between changes
//			- listElement : liste des elements a changer
//			- effect : effet to apply between changes
//
/**************************************************************/

function diapObject(_diapoDiv, _interval, _listElement, _effect){
	
	diapObject.diapoDiv = $("#"+_diapoDiv);
	diapObject.interval = _interval;
	diapObject.listElement = _listElement;
	diapObject.effect = _effect;
	diapObject.index = 0;

	//function which start the diaporama
	this.startDiapo = function(){
		clearTimeout(diapObject.diapo);
		if(diapObject.listElement.length > 1){
			diapObject.diapo = setTimeout("diapObject.majDiapo()", diapObject.interval);
		}
	
	}
	
	//function which change the element (image) in the specified div
	diapObject.majDiapo = function (){
		diapObject.diapoDiv.children().fadeOut('slow');
		if(diapObject.index == (diapObject.listElement.length - 1) ){
			diapObject.index = 0;
		}else{
			diapObject.index++;
		}
		var element = diapObject.listElement[diapObject.index];
		//$("#"+_diapoDiv).hide();
		$("#"+_diapoDiv).html(element);
		$("#"+_diapoDiv).children().fadeIn('slow');
		//clearTimeout(diapObject.diapo);
		diapObject.diapo = setTimeout("diapObject.majDiapo()", diapObject.interval);	
	}

}

/** class validator
 *
 */
function $validator(){

	this.validNumTel = function(numero){
		var regex = new RegExp(/^(06|07)[0-9]{8}/gi);
		if(!regex.test(numero)){
			return false;
		}
		return true;
	}
}




/**
 * fonction qui test si un objet est defini
 *
 **/

function isset(_param){

	if(_param == '')return false;
	if(_param == 'undefined') return false;
	return true;
	
	
}


/********
 * fonction question amour
 * prend un formulaire en parametre
 *
 *
 *
 *****/

function checkOneChecked(){

	var form = $("form input:radio:checked");	
	if(form.length == 0){
		alert('vous devez faire un choix ');
		return false;	
	}
	return true;

}



function QuestionAmourCheckDate(){

	/** 
 	 * correction lié au ticket de support : FRDEVTEAMSUPPORT-81
 	 * par rachid EL KHAMLICHI.
	 * je passe tout en uppercase pour eviter les problemes de casse.
 	 *
	 *
	 **/

	
	var year = $('#FirstSelectYear :selected').text().toUpperCase();
	var month = $('#FirstSelectMonth :selected').text().toUpperCase();
	var day = $('#FirstSelectDay :selected ').text().toUpperCase();
		
	if(year == 'ANNÉE' || day == 'JOUR' || month == 'MOIS' ){
		alert("Merci de préciser votre sexe et votre date de naissance");
		return false;
	}

	return true;	
}

/**
 * fonction qui va checker le numero de telephone
 * et en meme temps si il es valide va envoyer
 * un hit a google analitycs.
 **/
function QuestionAmourCheckMsisdn(google_ua){


	var telephone = $('#msisdn').val();
	var regex = new RegExp(/^(06|07)[0-9]{8}/gi);
		if(!regex.test(telephone)){
			alert("Vous n’avez pas saisi votre numéro de mobile");
			return false;
		}else{
			//on fait un hit vers google analitycs
			pageTracker._trackPageview('/msisdn');
			return true;
		}
}
