
		/************************************/
		/*	Gestion Langues					*/
		/************************************/
		var CodTxts = new Array();
		CodTxts['fr'] = new Array();
		CodTxts['es'] = new Array();
		
		CodTxts['fr']['RemPanART'] = "Voulez-vous vraiment enlever ce produit de votre panier ?";
		CodTxts['fr']['Check_dispovente_nondispo'] = "Ce produit n'est actuellement pas disponible à la vente en ligne.\nVous pouvez tout de même ajouter ce produit à votre panier et en demander un devis.\n\nVoulez-vous ajouter ce produit à votre panier ?";
		CodTxts['fr']['Check_dispovente_state0'] = 'Votre article est sur le point d\'être ajouté à votre panier.<br /><br /><p style="font-weight:normal;"><span class="mihyap">Nos glissières sont vendues à l\'unité et non à la paire.</span> Pour un montage standard, pour un tiroir par exemple, il vous faudra donc généralement deux glissières.</p><br />Combien de produits voulez-vous ajouter à votre panier : <input type="text" id="alertName" name="qt" value="2" maxlength="2" size="2" /><input type="hidden" id="ref" name="ref" value="[ID]" /><input type="hidden" id="origin" name="origin" value="msgbox" />';
		CodTxts['fr']['Check_dispovente_state0bt1'] = 'Annuler';
		CodTxts['fr']['Check_dispovente_state0bt2'] = 'Ajouter';
		CodTxts['fr']['Check_dispovente_state1'] = 'Votre article a bien été ajouté à votre panier.';
		CodTxts['fr']['Check_dispovente_state1bt1'] = 'Continuer mes achats';
		CodTxts['fr']['Check_dispovente_state1bt2'] = 'Terminer ma commande';
		CodTxts['fr']['GetSTocks_err'] = 'Nos serveurs étant actuellement en maintenance, nous ne pouvons vous confirmer le stock ni enregistrer de commande.\nNous nous excusons de ce désagrément et vous demandons de renouveler votre demande dans quelques instants.';
		CodTxts['fr']['RecalcPan'] = 'En appliquant ces modifications, certain \351l\351ments de votre panier seront supprim\351s.\nVoulez-vous vraiment enlever ces produits de votre panier ?';
		CodTxts['fr']['DelPanAllART'] = 'Voulez-vous vraiment enlever tous les produits votre panier ?';
		
		
		CodTxts['es']['RemPanART'] = "¿Quiere de verdad retirar este producto de su cesta?";
		CodTxts['es']['Check_dispovente_nondispo'] = "Este producto no está disponible actualmente a la venta en línea.\nPuede añadir este producto a su cesta y pedir un presupuesto.\n\nQuiere añadir este producto a su cesta?";
		CodTxts['es']['Check_dispovente_state0'] = 'Su artículo  está sobre el punto de añadese a su cesta.<br /><br /><p style="font-weight:normal;"><span class="mihyap">Nuestras guias telescópicas se venden a la unidad y no al par.</span>Para un montaje estándar, para un cajón por ejemplo, necesitareis pues generalmente dos guias telescópicas.</p><br />Cuánto productos quiere añadir a su cesta : <input type="text" id="alertName" name="qt" value="2" maxlength="2" size="2" /><input type="hidden" id="ref" name="ref" value="[ID]" /><input type="hidden" id="origin" name="origin" value="msgbox" />';
		CodTxts['es']['Check_dispovente_state0bt1'] = 'Anular';
		CodTxts['es']['Check_dispovente_state0bt2'] = 'Añadir';
		CodTxts['es']['Check_dispovente_state1'] = 'Su articulose añadió bien a su cesta.';
		CodTxts['es']['Check_dispovente_state1bt1'] = 'Seguir mis compras';
		CodTxts['es']['Check_dispovente_state1bt2'] = 'Terminar mi pedido';
		CodTxts['es']['GetSTocks_err'] = 'Nuestros servidores que son actualmente en mantenimiento, no podemos confirmarle las existencias ni registrar de pedido.\nNos disculpamos de esta molestia y le pedimos renovar su demanda en algunos momentos.';
		CodTxts['es']['RecalcPan'] = 'Al aplicar estas modificaciones, se suprimirán determinados elementos de su cesta.\nQuiere de verdad retirar estos productos de su cesta?';
		CodTxts['es']['DelPanAllART'] = 'Quiere de verdad retirar todos los producto de su cesta?';
		


$Q(document).ready(function(){ 












		/************************************/
		/*	Gestion panier					*/
		/************************************/
			
			$Q('.pan_add_bt').livequery('click', function(event) {  
			//$Q('.pan_add_bt').click(function(){
				origin = ( $Q(this).parent().attr('class')=='icoBoxPanier')? 'panier': 'table';
			//	alert(origin);
				//alert($Q(this).parent().attr('class'));
				if(origin=='table') { Check_dispovente( $Q(this).attr('id').replace("_add", ''), origin); }
				else { AddPanART( $Q(this).attr('id').replace("_add", ''), origin, 1); }
			});
			
			
			$Q('.pan_del_bt').livequery('click', function(event) {  
				
				DelPanART( $Q(this).attr('id').replace("_del", ''));
			});
			
			/* Panier Complet */
			$Q('#armageddon').livequery('click', function(event) {  
				
				DelPanAllART();
			});
			
			$Q('.removeArt').livequery('click', function(event) {  
				
				RemPanART( $Q(this).attr('id').replace("_rem", ''));
			});
			
			$Q('#recalc, #buylnk').livequery('click', function(event) {  
				//alert('click');
				RecalcPan();
			});
				
		
			$Q('.vals').keypress(function (e) {
				if(e.which < 48 || e.which > 57) {
					
					e.preventDefault();
					e.stopPropagation();
					}
				
		
			});
			
			$Q('.XHRUpd').keyup(function (e) {
				
					
					
			RecalcPan();
		
			});
										  
			/*
			
			jQuery.isJson = function(str) {
				if (jQuery.trim(str) == '') return false;
				str = str.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
				return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str); } 
				
			*/
	});

	
	
	function AddPanART(id, origin, qt)
	{
		// => passage info sup pour affichage message confirmation ajout au panier
		qtd=(parseInt(qt)>1)? '&qtd='+parseInt(qt) : '&qtd=1';
		o = (origin=='panier')? 0: 1;
		durl = (o==0)? '' : '&url='+$Q("#product_url").attr('href');
		$Q.ajax({type: "GET", url: site+"tl_files/chambrelan/_soa/soa_pan.php?act=soa&todo=addpan&art="+id+"&origin="+o+durl+qtd, dataType: "json", success: function(json){ 
		//alert(json.toSource());
				if(json['ok']=='1')
				{
					//si ajout depuis tableau charges
					
					if(origin=='table')
					{
						//$Q("#msg_ajout_ok").show();
						//$Q("#msg_ajout_ok").fadeOut(2000);
						$Q("#pan_tbody").html(json['msg']);
						$Q.scrollTo("#sideBarTopCorner");
						$Q("#BlocPanier, #BlocAchat").fadeOut(800).fadeIn(800).fadeOut(400).fadeIn(400).fadeOut(400).fadeIn(400);

						//alert("Vérif stock+prix -> info devis et non commande\nRemonter vers panier.");
						
						//document.location.href="FR/produits/panier.html";
						$Q("#"+id+"_nb").html((parseInt($Q("#"+id+"_nb").html())+1));
					}
					
					else if(origin=='msgbox')
					{
						//$Q("#msg_ajout_ok").show();
						//$Q("#msg_ajout_ok").fadeOut(2000);
						$Q("#pan_tbody").html(json['msg']);
						//$Q.scrollTo("#sideBarTopCorner");
						//$Q("#BlocPanier, #BlocAchat").fadeOut(800).fadeIn(800).fadeOut(400).fadeIn(400).fadeOut(400).fadeIn(400);
						
						//State
						$Q.prompt.goToState('state1');
						
						//alert("Vérif stock+prix -> info devis et non commande\nRemonter vers panier.");
						
						//document.location.href="FR/produits/panier.html";
						$Q("#"+id+"_nb").html((parseInt($Q("#"+id+"_nb").html())+parseInt(qt)));
					}
					
					else
					{
						$Q("#"+id+"_nb").html((parseInt($Q("#"+id+"_nb").html())+1));	
					}
					/**/
									
					// Si ajout depuis espace panier
					
					$Q("#NBARTS").html(json['tot']);
					
					if(json['tot']>0) { $Q(".optgestpan").show(); $Q("#BlocPanier").show(); $Q("#BlocAchat").show(); }
				}
			
			}
		
			
		});
	
	}
	
	
	function DelPanART(id)
	{
	
		if(parseInt($Q("#"+id+"_nb").html())>1)
		{
			DODelPanART(id);
		}
		else
		{
			if (confirm(CodTxts[lang]['RemPanART'])) { 
			  DODelPanART(id);
			}
		}
		
	}
	
		
	
	function DODelPanART(id)
	{
		$Q.ajax({type: "GET", url: site+"tl_files/chambrelan/_soa/soa_pan.php?act=soa&todo=delpan&art="+id, dataType: "json", success: function(json){ 
		
				if(json['ok']=='1')
				{
					if(json['msg']=='')
					{
						$Q("#"+id+"_nb").html((parseInt($Q("#"+id+"_nb").html())-1));						
					}
					else
					{
						$Q("#pan_tbody").html(json['msg']);					
					}
					$Q("#NBARTS").html(json['tot']);
					
					
					if(json['tot']<1) { $Q(".optgestpan").hide(); $Q("#BlocPanier").hide(); $Q("#BlocAchat").hide(); }
					
				}			
			}
		});
	
	}	
	
function mysubmitfunc(v,m,f){
     //alert(v);
	 //alert(m.toSource());
	 if(v==true) { alert(f.ref); }
	 
      return true;
}
	
	function Check_dispovente(id, origin)
	{
		
		if((parseInt($Q("#"+id+"_stock").html())<1)||($Q("#"+id+"_stock").hasClass("noprx"))) 
		{ if(confirm(CodTxts[lang]['Check_dispovente_nondispo'])) { AddPanART( id, origin, 1) } }	
		else { 
		/*
			var txt = 'Votre article est sur le point d\'être ajouté au panier.<br /><br /><p style="font-weight:normal;"><span class="mihyap">Nos glissières sont vendues à l\'unité et non à la paire.</span> Pour un montage standard, pour un tiroir par exemple, il vous faudra donc généralement deux glissières.</p>Combien de produits voulez-vous ajouter à votre panier : <input type="text" id="alertName" name="myname" value="2" maxlength="2" size="2" /><input type="hidden" id="ref" name="ref" value="'+id+'" /><input type="hidden" id="origin" name="origin" value="msgbox" />';


			$Q.prompt(txt,{
				  submit: mysubmitfunc,
				  //buttons: { Ajouter :  }
				  buttons: { Annuler: false, Ajouter: true },
				focus: 1,
      			prefix:'jqismooth'

			});
		*/
		//alert(CodTxts[lang]['Check_dispovente_state1bt2'].toUpperCase());
		var bt = new Object();
		bt[CodTxts[lang]['Check_dispovente_state0bt1']] = false;
		bt[CodTxts[lang]['Check_dispovente_state0bt2']] = true; 
		//alert(bt.toString());
		var bt2 = new Object();
		bt2[CodTxts[lang]['Check_dispovente_state1bt1']] = false;
		bt2[CodTxts[lang]['Check_dispovente_state1bt2']] = true; 
		//alert(bt.toString());
		
		CodTxts['fr']['urlcommander'] = site+"FR/produits/commander.html";
		CodTxts['es']['urlcommander'] = site+"ES/productos/presupuesto.html";
		
		var temp = {
					state0: {
						html:CodTxts[lang]['Check_dispovente_state0'].replace('[ID]',id),
						buttons: bt,
						focus: 1,
						submit:function(v,m,f){ 
							if(!v)
								$Q.prompt.close()
							//else $Q.prompt.goToState('state1');//go forward
							else AddPanART( f.ref, f.origin, f.qt);//go forward
							return false; 
						}
					},
					state1: {
						html:CodTxts[lang]['Check_dispovente_state1'],
						buttons: bt2,
						focus: 2,
						submit:function(v,m,f){
							if(v==0)
								$Q.prompt.close()
							else if(v==1)
								document.location.href= CodTxts[lang]['urlcommander'];
								//$.prompt.goToState('state2');//go forward
							return false; 
						}
					}
				};
				
				$Q.prompt(temp, { prefix:'jqismooth' });
			/*	
				$Q.prompt(temp,{callback: function(v2,m2,f2){
						
						$Q.prompt(html:'Votre article a bien été ajouté à votre panier.',{ buttons: { 'Comtinuer mes achats': 0, 'Terminer ma commande': 1 },
							focus: 2,
							submit:function(v,m,f){
								if(v==0)
									$Q.prompt.close()
								else if(v==1)
									document.location.href="FR/produits/commander.html";
									//$.prompt.goToState('state2');//go forward
								return false; 
							}
						});
						
				} });	
						
				*/
		
				
			//$Q.prompt('Example 1');
			//AddPanART( id, origin) 
		
		}
	}
		
		
	
	
	function GetSTocks(ref)
	{
		//alert('test');
		$Q.ajax({type: "GET", url: site+"tl_files/chambrelan/_soa/soa_produit.php?act=soa&todo=GetStock&ref="+ref, dataType: "json", success: function(json){ 
				//alert(json);
		
		/*
				for(i=0;i<json.length;i++)
				{
					//alert(json[i]);	
					
					$Q("#"+json[i]['ref']+"_stock").html(json[i]['stock']);
					$Q("#"+json[i]['ref']+"_prix").html(json[i]['prix']);
					$Q("."+json[i]['ref']+"_addopt").show();

				}
				
				*/
				//alert(json);
				/*
				if(!$Q.isJson(json)) {
					alert('NO JSON');	
				}
				*/
				json = eval(json);
				
				for (var i in json)
                {    
					$Q("#"+i+"_stock").html(json[i]['stock']);
					if(json[i]['prix']=='----') { $Q("#"+i+"_stock").addClass("noprx");	 }
					//$Q("#"+i+"_prix").html(json[i]['prix']);
					$Q("."+i+"_addopt").show();
					//alert(json[i].toSource());
				}
		/*		if(json['ok']=='1')
				{
					if(json['msg']=='')
					{
						$Q("#"+id+"_nb").html((parseInt($Q("#"+id+"_nb").html())-1));						
					}
					else
					{
						$Q("#pan_tbody").html(json['msg']);					
					}
					$Q("#NBARTS").html(json['tot']);
					
					
					if(json['tot']<1) { $Q(".optgestpan").hide(); }
				}		*/	
			},
                error:function (xhr, ajaxOptions, thrownError){
                   // alert(xhr.status);
				   
                    alert(CodTxts[lang]['GetSTocks_err']);
					
					$Q.ajax({type: "GET", url: site+"tl_files/chambrelan/_soa/soa_produit.php?act=soa&todo=SoapErrors&MSG="+urlencode(xhr.responseText+'<hr><ul><li>Page : '+document.location.href+'</li></ul>')});
					//$Q.ajax({type: "GET", url: site+"tl_files/chambrelan/_soa/soa_produit.php?act=soa&todo=SoapErrors"});
                }   
		});
	
	}	
	
	
	function urlencode (str) {
    str = (str+'').toString();
    
    // Tilde should be allowed unescaped in future versions of PHP (as reflected below), but if you want to reflect current
    // PHP behavior, you would need to add ".replace(/~/g, '%7E');" to the following.
    return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
}
	
	
	
	
	
	/* Panier complet  */
	
	
	function RemPanART(id)
	{
			//alert(lang);
		
		
		if (confirm(CodTxts[lang]['RemPanART'])) { 
			   $Q.ajax({type: "GET", url: site+"tl_files/chambrelan/_soa/soa_pan.php?act=soa&todo=rempan&art="+id, dataType: "json", success: function(json){ 
		
				if(json['ok']=='1')
				{
									
					if(json['tot']<1)
					{
						/*$Q("#nbprod").html('0');		
						$Q("#recalc").hide();		
						$Q("#armageddon").hide();	
						$Q(".cart_table").hide();	
						$Q("#msgvide").show();		*/		
						HideUseless();
						
						$Q("#dmainContent").hide();	
						$Q("#commstate").hide();	
						$Q(".optcalcpan").hide();//	
						
					}
					else
					{
						//alert(json);
						//var $kids = $(e.target).children();

						$Q("#nbprod").html(json['tot']);
						$Q("#"+id+"_pant").remove();	
						RecalcPan();
					}
					
					
				}			
			}
		});
		}
		
	}
	
	function RecalcPan()
	{
		 var cha = '';
		 var azzero = 0;
		 $Q('.vals').each( function() { 
			  //this.attr('id', false);
			  cha = cha + '&' + $Q(this).attr('id').replace("_nb", '') + '=' + $Q(this).val();
			  if(($Q(this).val()==0)||$Q(this).val()=='') { azzero = azzero+1; }
			  
			});
		
		if((azzero==0)||(confirm(CodTxts[lang]['RecalcPan']))) { 
		 $Q.ajax({type: "GET", url: site+"tl_files/chambrelan/_soa/soa_pan.php?act=soa&todo=updpan"+cha, dataType: "json", success: function(json){ 
		
				if(json['ok']=='1')
				{
					
							
					if(json['tot']<1)
					{
						//alert('tabularasa');
						/*
						$Q("#nbprod").html('0');		
						$Q("#recalc").hide();		
						$Q("#much").hide();		
						$Q("#few").hide();		
						$Q("#armageddon").hide();	
						$Q(".cart_table").hide();	
						$Q(".nfopanprodz").hide();
						$Q("#msgvide").show();		
						
						$Q("#msgfew").hide(); $Q("#msgmuch").hide(); $Q("#buylnk").hide(); $Q("#msgsto").hide(); $Q("#devlnk").show(); */
						HideUseless();
						$Q("#dmainContent").hide(); $Q("#devlnk").show(); 
						
						$Q("#commstate").hide();	
						$Q(".optcalcpan").hide();//	
					}
					else if((json['tot']>0)&&($Q("#facturetable .nfosoc").length==0))
					{
						//alert(azzero+' / '+$Q("#facturetable .nfosoc").length);
						//alert($Q("#facturetable .nfosoc").length);
						
						HideUseless();
						$Q("#dmainContent").hide(); 
						$Q("#devlnk").show(); 
						$Q("#msgsto").show(); 
						$Q("#commstate").hide();	
						$Q("#msgvide, #contenu-de-la-page-de-la-commande p").hide();
						
					$Q(".optcalcpan").hide();//	
					}
					else
					{
						$Q("#nbprod").html(json['tot']);
						var sstot = 0;
						var sstotglob = 0;
						var got_max_stock = 0;
						$Q('.vals').each( function() { 
						  //this.attr('id', false);
						  elem = $Q(this).attr('id').replace("_nb", '');
						  cha = cha + '&' + elem + '=' + $Q(this).val();
						  
						  
						  if(($Q(this).val()==0)||$Q(this).val()=='') { $Q("#"+elem+"_pant").remove(); sstot = 0; }
						  else
						  {
							 if($Q(this).val() > intval($Q(this).attr('class').replace('vals max_',''))) { got_max_stock = 1; }
							 
							 sstot = ($Q(this).val()*(parseInt($Q("#"+elem+"_pu").html())));
							 
							  $Q("#"+elem+"_pt").html(number_format(sstot, 2, ',', ' '));
							  
						  }
						  
						  sstotglob = (sstotglob+sstot);
						  
						  
						});
						
						var tva = ((sstotglob*19.6)/100);
						
						$Q("#sstotnfo").html(number_format(sstotglob, 2, ',', ' '));
						$Q("#tvanfo").html(number_format(tva, 2, ',', ' '));
						
						var tot = sstotglob+tva;
						$Q("#totnfo").html("****"+number_format(tot, 2, ',', ' '));
						
						
						if((tot<50)||(tot>1000))
						{
							//$Q("#buylnk").hide();
							if((tot<50)) { $Q("#msgsto").hide(); $Q("#buylnk").show(); $Q("#devlnk").hide(); $Q("#msgmuch").hide(); $Q("#msgfew").hide(); }
							else if(tot>1000) {  $Q("#msgsto").hide(); $Q("#buylnk").hide(); $Q("#devlnk").show(); $Q("#msgfew").hide(); $Q("#msgmuch").show(); }
							
						}
						else
						{
							if(got_max_stock == 1)
							{
								$Q("#msgfew").hide(); $Q("#msgmuch").hide(); $Q("#buylnk").hide(); $Q("#msgsto").show(); $Q("#devlnk").show(); 
							}
							else
							{
								 $Q("#msgsto").hide(); $Q("#msgfew").hide(); $Q("#msgmuch").hide();$Q("#devlnk").hide();  $Q("#buylnk").show(); 
							}
						}
					}
					
					
				}			
			}
		});
		}
	}
	
	
	
	function DelPanAllART()
	{

		if (confirm(CodTxts[lang]['DelPanAllART'])) { 
			  $Q.ajax({type: "GET", url: site+"tl_files/chambrelan/_soa/soa_pan.php?act=soa&todo=delallpan", dataType: "json", success: function(json){ 
		
				if(json['ok']=='1')
				{
					//alert(window.opener.document.location);
					/*
					$Q("#nbprod").html('0');//		
					$Q("#recalc").hide();		
					$Q("#armageddon").hide();	
					$Q(".cart_table").hide();//
					$Q(".nfopanprodz").hide();//
					
					$Q("#msgvide").show();//
					
					$Q("#msgfew").hide(); $Q("#msgmuch").hide(); $Q("#buylnk").hide(); $Q("#msgsto").hide(); $Q("#devlnk").show(); */
					
					HideUseless();
					$Q("#dmainContent").hide();		
						$Q("#commstate").hide();
					$Q(".optcalcpan").hide();//	
						
					
					
				}			
			}
		});
		}
		
		
	}
	
	function HideUseless()
	{
						$Q("#nbprod").html('0');		
						$Q("#recalc").hide();		
						$Q("#much").hide();		
						$Q("#few").hide();		
						$Q("#armageddon").hide();	
						$Q(".cart_table").hide();	
						$Q(".nfopanprodz").hide();
						$Q("#msgvide").show();		
						
						$Q("#msgfew").hide(); $Q("#msgmuch").hide(); $Q("#buylnk").hide(); $Q("#msgsto").hide(); $Q("#devlnk").show(); 
	}
	
	function number_format (number, decimals, dec_point, thousands_sep) {
    // Formats a number with grouped thousands
    //
    // version: 906.1806
    // discuss at: http://phpjs.org/functions/number_format
    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     bugfix by: Michael White (http://getsprink.com)
    // +     bugfix by: Benjamin Lupton
    // +     bugfix by: Allan Jensen (http://www.winternet.no)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +     bugfix by: Howard Yeend
    // +    revised by: Luke Smith (http://lucassmith.name)
    // +     bugfix by: Diogo Resende
    // +     bugfix by: Rival
    // +     input by: Kheang Hok Chin (http://www.distantia.ca/)
    // +     improved by: davook
    // +     improved by: Brett Zamir (http://brett-zamir.me)
    // +     input by: Jay Klehr
    // +     improved by: Brett Zamir (http://brett-zamir.me)
    // +     input by: Amir Habibi (http://www.residence-mixte.com/)
    // +     bugfix by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: number_format(1234.56);
    // *     returns 1: '1,235'
    // *     example 2: number_format(1234.56, 2, ',', ' ');
    // *     returns 2: '1 234,56'
    // *     example 3: number_format(1234.5678, 2, '.', '');
    // *     returns 3: '1234.57'
    // *     example 4: number_format(67, 2, ',', '.');
    // *     returns 4: '67,00'
    // *     example 5: number_format(1000);
    // *     returns 5: '1,000'
    // *     example 6: number_format(67.311, 2);
    // *     returns 6: '67.31'
    // *     example 7: number_format(1000.55, 1);
    // *     returns 7: '1,000.6'
    // *     example 8: number_format(67000, 5, ',', '.');
    // *     returns 8: '67.000,00000'
    // *     example 9: number_format(0.9, 0);
    // *     returns 9: '1'
    // *     example 10: number_format('1.20', 2);
    // *     returns 10: '1.20'
    // *     example 11: number_format('1.20', 4);
    // *     returns 11: '1.2000'
    // *     example 12: number_format('1.2000', 3);
    // *     returns 12: '1.200'
    var n = number, prec = decimals;
 
    var toFixedFix = function (n,prec) {
        var k = Math.pow(10,prec);
        return (Math.round(n*k)/k).toString();
    };
 
    n = !isFinite(+n) ? 0 : +n;
    prec = !isFinite(+prec) ? 0 : Math.abs(prec);
    var sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;
    var dec = (typeof dec_point === 'undefined') ? '.' : dec_point;
 
    var s = (prec > 0) ? toFixedFix(n, prec) : toFixedFix(Math.round(n), prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;
 
    var abs = toFixedFix(Math.abs(n), prec);
    var _, i;
 
    if (abs >= 1000) {
        _ = abs.split(/\D/);
        i = _[0].length % 3 || 3;
 
        _[0] = s.slice(0,i + (n < 0)) +
              _[0].slice(i).replace(/(\d{3})/g, sep+'$1');
        s = _.join(dec);
    } else {
        s = s.replace('.', dec);
    }
 
    var decPos = s.indexOf(dec);
    if (prec >= 1 && decPos !== -1 && (s.length-decPos-1) < prec) {
        s += new Array(prec-(s.length-decPos-1)).join(0)+'0';
    }
    else if (prec >= 1 && decPos === -1) {
        s += dec+new Array(prec).join(0)+'0';
    }
    return s;
}

function intval (mixed_var, base) {
    // Get the integer value of a variable using the optional base for the conversion  
    // 
    // version: 910.813
    // discuss at: http://phpjs.org/functions/intval
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: stensi
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   input by: Matteo
    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: intval('Kevin van Zonneveld');
    // *     returns 1: 0
    // *     example 2: intval(4.2);
    // *     returns 2: 4
    // *     example 3: intval(42, 8);
    // *     returns 3: 42
    // *     example 4: intval('09');
    // *     returns 4: 9
    // *     example 5: intval('1e', 16);
    // *     returns 5: 30
    var tmp;

    var type = typeof( mixed_var );

    if (type === 'boolean') {
        return (mixed_var) ? 1 : 0;
    } else if (type === 'string') {
        tmp = parseInt(mixed_var, base || 10);
        return (isNaN(tmp) || !isFinite(tmp)) ? 0 : tmp;
    } else if (type === 'number' && isFinite(mixed_var) ) {
        return Math.floor(mixed_var);
    } else {
        return 0;
    }
}
