var mt;
var id;
var rel;
var indice;
var nocache = Math.round(Math.random()*1000);
var agent=navigator.userAgent.toLowerCase();
var is_iphone = ((agent.indexOf('iphone')!=-1));
var is_ipad = ((agent.indexOf('ipad')!=-1));
var is_ipod = ((agent.indexOf('ipod')!=-1));
$(document).ready(function(){
	$('.imgload').hide();
	$.history.init(pageload);	
	$('.submenu ul li:first-child a').css({borderLeft:'none'});
	$('.voce:first-child').css({borderLeft:'none'});
	$('.riga .image:first-child .tit').css({borderLeft:'none'});
	
	if (!is_iphone && !is_ipad && !is_ipod) {
		$('.prodotto a').fancybox();
		$('.testim a').fancybox();
		$('.modale').fancybox();
		$('.openvideo').fancybox(
			{
				'frameWidth': 700
			}						 
		);
	}
	else{
		$('.prodotto a').fancybox({'overlayShow':false});
		$('.testim a').fancybox({'overlayShow':false});
		$('.modale').fancybox({'overlayShow':false});
		$('.openvideo').fancybox(
			{
				'frameWidth': 700,
				'overlayShow':false
			}						 
		);
	}
	$('.menu ul li a').hover(function(){
		clearTimeout(mt);
		id = $(this).html();
		$('.menu ul li a').removeClass('active');
		$('.submenu').css({display:'none'});
		$('#'+id).css({display:'block'});
		if($('#'+id).html() != null){
			$('.menu ul li a').css({height:'55px'});
		} else {
			$('.menu ul li a').css({height:'auto'});
		}
	},function(){
		mt = setTimeout(function(){
			$('.submenu').css({display:'none'});
			checkSection();
		}, 200);
	});
	$('.submenu').hover(function(){
		clearTimeout(mt);
		indice = $('.submenu').index(this)+1;
		$('.menu ul li:nth-child('+indice+') a').addClass('active');
	}, function(){
		mt = setTimeout(function(){
			$('.submenu').css({display:'none'});
			$('.menu ul li a').removeClass('active');
			checkSection();
		}, 200);
	});
	$('.box:nth-child(1) a').mouseover(function(){
		$(this).next().css({display:'block'});
		$(this).stop('false','false').animate({width:'196px'}, 500);
		$(this).next().stop('false','false').animate({width:'150px'}, 500);
	});
});

function checkSection(){}

function apriVideo(){
	$("#vide").show();
}
function closeFancy(){
	$.fancybox.close();
	$("#vide").hide();
}
var rel;

function loadproducts(url, par, block) {
	if (block != 1) {
		var hashLoad = microtime(true)
		$.history.load(hashLoad);
		
		var JSONobject = {
			url: url,
			par: par,
			func: 'loadproducts',
			rel: rel
		}
		
		$.cookie('c'+hashLoad, JSON.stringify(JSONobject));
		$.cookie('lastPage', location.href);
	}
	
	var rel=$(this).attr('rel');

	$('.contentMenu a').each(function() {
		if ($(this).attr('rel')==rel)
		{
			$('.contentMenu a').removeClass('active');
			$(this).addClass('active');
		}
	});

	//$('.imgload').show();
	$.getJSON(url,  par, function(data) {
		//$('.imgload').hide();
		$('.immagini170').empty();
		
		if (rel==undefined) rel=($('.contentMenu a.active').attr('rel'));
		
		if (data==null)
		{
			$('.immagini170').html('<div>'+noresult+'</div><div class="clear"></div>');
		} else {
				def();	
				var i=0;
				for (v in data.img)
				{
					if (i % 4 == 0 && i!=0)
					{
						$('.immagini170').append('<div class="image last"><a href="scheda.html?id='+data.idproducts[v]+'" class="pfixed">'
						+'<img src="'+data.img[v]+'">'+
						'</a><p align="right"><a href="scheda.html?id='+data.idproducts[v]+'">'+data.nome[v]+'</a></p></div><div class="clear"></div>');
						i=0;
					} else {
						$('.immagini170').append('<div class="image"><a href="scheda.html?id='+data.idproducts[v]+'" class="pfixed">'
						+'<img src="'+data.img[v]+'">'+
						'</a><p align="right"><a href="scheda.html?id='+data.idproducts[v]+'">'+data.nome[v]+'</a></p></div>');
						i++;
					}
				}
				if (i % 4 != 0 || i<5) $('.immagini170').append('<div class="clear"></div>');
		}	
	});
}

//Prod dna
function loadproductsdna(url, par, block) {
	//$('.imgload').show();
	if (block != 1) {
		var hashLoad = microtime(true)
		$.history.load(hashLoad);
		
		var JSONobject = {
			url: url,
			par: par,
			func: 'loadproductsdna',
			rel: rel
		}
		
		
		$.cookie('c'+hashLoad, JSON.stringify(JSONobject));
		$.cookie('lastPage', location.href);
	}
	
	
		//Splitto gli &
		var spa=par.split('&');
		
		var idsbc=spa[0].split('=');
		var idspt=spa[1].split('=');
		var idcat=spa[2].split('=');
		//sbc
		var sbc = (idsbc[1]);
		//sport
		var id_sport = (idspt[1]);
		//cat
		var id_categoria = (idcat[1]);
	
	
	var rel=$(this).attr('rel');

	$('.contentMenu a').each(function() {
		if ($(this).attr('rel')==rel)
		{
			$('.contentMenu a').removeClass('active');
			$(this).addClass('active');
		}
	});

	$('.imgload').show();
	$.getJSON(url,  spa[0], function(data) {
		$('.imgload').hide();
		$('.immagini170').empty();
		
		if (data==null)
		{
			$('.immagini170').html('<div>'+noresult+'</div><div class="clear"></div>');
			
		} else {
				$.cookie('cerca','no');
				var i=0;
				for (v in data.img)
				{
					if (i % 4 == 0 && i!=0)
					{
						$('.immagini170').append('<div class="image last"><a href="scheda.html?id='+data.idproducts[v]+'" class="pfixed">'
						+'<img src="'+data.img[v]+'">'+
						'</a><p align="right"><a href="scheda.html?id='+data.idproducts[v]+'">'+data.nome[v]+'</a></p></div><div class="clear"></div>');
						i=0;
					} else {
						$('.immagini170').append('<div class="image"><a href="scheda.html?id='+data.idproducts[v]+'" class="pfixed">'
						+'<img src="'+data.img[v]+'">'+
						'</a><p align="right"><a href="scheda.html?id='+data.idproducts[v]+'">'+data.nome[v]+'</a></p></div>');
						i++;
					}
				}
				if (i % 4 != 0 || i<5) $('.immagini170').append('<div class="clear"></div>');
		}	
	});
}


function def()
{
	idc=$('.dna .contentMenu ul li a.active').attr('rel');
	carica_categorie(idc);
}


	//Gestisce le Categorie
	function carica_categorie(cat)
	{
		$.getJSON('../core/cat_dna.php',  {categoria: cat}, function(data) {
			if (data!=null)
			{
				var html = ''+
				'<div class="range" rel=0>'+
					data.title+
					'<span class="separatore">|</span> <a href="javascript:void(0);" class="tipo"><span class="t"></span> <img src="../img/freccia-gialla.png" alt="" /></a>'+
					'<div class="elenco">'+
						'<ul>';
						for (var k in data['rows'])
						{
							html += '<li><a href="javascript:void(0);" rel="'+data['rows'][k]['id']+'">'+data['rows'][k]['title']+'</a></li>';
						}
				html += '</ul>'+
					'</div>'+
				'</div>';
				
				$('#categorie').html(html);
				$('#filtri').empty();
				
				
				$('#categorie .range a.tipo').click(function(){
					ele = $(this).next();
					ele.slideToggle();
					tipo = $(this).children('.t');
					//tipologia
					tipologia=$('.contentMenu a.active').text();
				});
				
				$('#categorie .range a.tipo').next().find('a').click(function(){
					ele.slideUp();
					id_subcat=$(this).attr('rel');
					tipo.html($(this).html());
					var rel = $(this).parent('li').attr('rel');
					i=$(this).parent('li').parent('ul').parent('div').parent('div').attr('rel');
					parameter[i] = $(this).attr('rel');
					carica(id_subcat);
				});
				
			} else {
						$('#categorie').empty();
						$('#filtri').empty();
			}
		});
}


	//Categorie DNA
	//Gestisce le Categorie
	function categorie_dna(cat)
	{
		$.cookie('cerca','no');
		$('#categorie').empty();
		$.getJSON('../core/cat_dna.php',  {categoria: cat}, function(data) {
			
			if (data!=null)
			{
				//$('.imgload').hide();
				var html = ''+
				'<div class="range" rel="0">'+
					data.title+
					'<span class="separatore">|</span> <a href="javascript:void(0);" class="tipo"><span class="t"></span> <img src="../img/freccia-gialla.png" alt="" /></a>'+
					'<div class="elenco">'+
						'<ul>';
						for (var k in data['rows'])
						{
							html += '<li><a href="javascript:void(0);" rel="'+data['rows'][k]['id']+'">'+data['rows'][k]['title']+'</a></li>';
						}
				html += '</ul>'+
					'</div>'+
				'</div>';
				
				$('#catman').html(html);
				$('#filtri').empty();
				
				
				$('#catman .range a.tipo').click(function(){
					ele = $(this).next();
					ele.slideToggle();
					tipo = $(this).children('.t');
					//tipologia
					tipologia=$('.contentMenu a.active').text();
				});
				
				$('#catman .range a.tipo').next().find('a').click(function(){
					ele.slideUp();
					id_subcat=$(this).attr('rel');
					tipo.html($(this).html());
					var rel = $(this).parent('li').attr('rel');
					i=$(this).parent('li').parent('ul').parent('div').parent('div').attr('rel');
					parameter[i] = $(this).attr('rel');
					//Sport e categoria
					
					switch ($('.contentMenu a.active').attr('rel'))
					{
						case '14' :
						case '13':
						case '15':
						case '16': var id_sport=3;
						break;
						case '17':
						case '18': var id_sport=5;
						break;
						case '4': var id_sport=4;
						
					}

					var categoria=$('.contentMenu a.active').attr('rel');
					
					loadproductsdna('../core/sys_dna.php','master='+id_subcat+'&sp='+id_sport+'&ct='+categoria,0)
					
					$('#categorie').empty(); 
					sotto_categorie(parameter[i]+'&'+id_sport+'&'+categoria);
				});
				
			} else {
						$('#categorie').empty();
						$('#filtri').empty();
			}
		});
}


//sottocategorie
function sotto_categorie(parametro)
{
		
		//Splitto gli &
		var spa=parametro.split('&');

		//cat
		var sbc = (spa[0]);
		var id_sport=(spa[1]);
		var id_cat=(spa[2]);
	
	$.getJSON('../core/cat_dna.php',  {categoria: sbc}, function(data) {
	
				if (data!=null)
				{
					
					var html = ''+
					'<div class="range" rel="1">'+
						data.title+
						'<span class="separatore">|</span> <a href="javascript:void(0);" class="tipo"><span class="t"></span> <img src="../img/freccia-gialla.png" alt="" /></a>'+
						'<div class="elenco">'+
							'<ul>';
							for (var k in data['rows'])
							{
								html += '<li><a href="javascript:void(0);" rel="'+data['rows'][k]['id']+'">'+data['rows'][k]['title']+'</a></li>';
							}
					html += '</ul>'+
						'</div>'+
					'</div>';
					
					$('#categorie').append(html);
					$('#filtri').empty();
					
					qs='&'+id_sport+'&'+id_cat+'&'+sbc;
					
					
					$('#categorie .range a.tipo').click(function(){
						ele = $(this).next();
						ele.slideToggle();
						tipo = $(this).children('.t');
						//tipologia
						tipologia=$('.contentMenu a.active').text();
					});
					
					$('#categorie .range a.tipo').next().find('a').click(function(){
						ele.slideToggle();
						id_subcat=$(this).attr('rel');
						tipo.html($(this).html());
						var rel = $(this).parent('li').attr('rel');
						i=$(this).parent('li').parent('ul').parent('div').parent('div').attr('rel');
						parameter[i] = $(this).attr('rel');
						caricadna(parameter[i]+qs);
						//Carico prodotti
					});
					
				} else {
						
						//$('#categorie').empty();
						//$('#filtri').empty();
				}
			
	});
}

//FILTRI
function carica_filtri(cat)
{
	
	for (x=0;x<parameter.length;x++)
	{
		if (x!=0)
		{
			parameter[x]=undefined;
		}
	}
	
	
	$.getJSON('../core/filter_dna.php',  {categoria: cat}, function(dati) {
		
		$('#filtri').empty();
		
		z=0;
		
		for (var x in dati)
		{
				var html = ''+
				'<div class="range" rel="'+(z+1)+'">'+
					dati[x]['titolo']+
					'<span class="separatore">|</span> <a href="javascript:void(0);" class="tipo"><span class="t"></span> <img src="../img/freccia-gialla.png" alt="" /></a>'+
					'<div class="elenco">'+
						'<ul>';
						var temp=dati[x]['rows'];
						
						for (var k=0;k<(temp.length);k++)
						{
							html += '<li rel="'+k+'"><a href="javascript:void(0);" rel="'+dati[x]['rows'][k]['id']+'">'+dati[x]['rows'][k]['title']+'</a></li>';
						}
				html += '</ul>'+
					'</div>'+
				'</div>';
			
			$('#filtri').append(html);
			z++;
		}
		
		$('#filtri .range a.tipo').click(function(){
			ele = $(this).next();
			ele.slideToggle();
			tipo = $(this).children('.t');
			//tipologia
			tipologia=$('.contentMenu a.active').text();
		});
		
		$('#filtri .range a.tipo').next().find('a').click(function(){
			ele.slideUp();
			tipo.html($(this).html());
			rel = $(this).attr('rel');
			i=$(this).parent('li').parent('ul').parent('div').parent('div').attr('rel');
			parameter[i] = rel;
			caricaf(parameter);
		});
	});
}



//FILTRI DNA
function carica_filtri_dna(cat)
{
	//console.log(cat);
	var spa=cat.split('&');

		//cat
		//var sbc = (spa[0]);
		//var id_sport=(spa[1]);
		//var id_cat=(spa[2]);
		//console.log(spa);
		
	for (x=0;x<parameter.length;x++)
	{
		if (x!=0)
		{
			parameter[x]=undefined;
		}
	}
	$.getJSON('../core/filter_dna.php',  {categoria: spa[0]}, function(dati) {
		
		$('#filtri').empty();
		
		z=0;
		
		for (var x in dati)
		{
				var html = ''+
				'<div class="range" rel="'+(z+1)+'">'+
					dati[x]['titolo']+
					'<span class="separatore">|</span> <a href="javascript:void(0);" class="tipo"><span class="t"></span> <img src="../img/freccia-gialla.png" alt="" /></a>'+
					'<div class="elenco">'+
						'<ul>';
						var temp=dati[x]['rows'];
						
						for (var k=0;k<(temp.length);k++)
						{
							html += '<li rel="'+k+'"><a href="javascript:void(0);" rel="'+dati[x]['rows'][k]['id']+'">'+dati[x]['rows'][k]['title']+'</a></li>';
						}
				html += '</ul>'+
					'</div>'+
				'</div>';
			
			$('#filtri').append(html);
			z++;
		}
		
		$('#filtri .range a.tipo').click(function(){
			ele = $(this).next();
			ele.slideToggle();
			tipo = $(this).children('.t');
			//tipologia
			tipologia=$('.contentMenu a.active').text();
		});
		
		$('#filtri .range a.tipo').next().find('a').click(function(){
			ele.slideUp();
			tipo.html($(this).html());
			rel = $(this).attr('rel');
			parameter[0] = cat;
			if (i>0)
			i=$(this).parent('li').parent('ul').parent('div').parent('div').attr('rel');
			parameter[i] = rel;
			caricafdna(parameter);
		});
	});
}

function caricafdna(parametro) {
	var temp=parametro[0];
	
	var p=(temp.split('&'));
	
	parametro[0]=p[0];
	
	var filtri;
	var sport=($('.contentMenu a.active').attr('rel'));
	for (x=0;x<parametro.length;x++)
	{
		if (x==0)
		{
			cat=parametro[x];
			
		} else {
			
			if (parametro[x]!=undefined)
			{
				if (filtri==undefined)
				{
					filtri=parametro[x];
				} else {
					filtri+='_'+parametro[x];
				}
			}
		}	
	}
	//Ajax
	$('.imgload').show();
	$.getJSON('../core/sys_dna.php',  {cat: cat, fil: filtri}, function(data) {
		$('.imgload').hide();
		$('.immagini170').empty();
		if (data==null)
		{
			
			$('.immagini170').html('<div>'+noresult+'</div><div class="clear"></div>');
		} else {
				var i=0;
					for (v in data.img)
					{
						if (i % 4 == 0 && i!=0)
						{
							$('.immagini170').append('<div class="image last"><a href="scheda.html?id='+data.idproducts[v]+'" class="pfixed">'
							+'<img src="'+data.img[v]+'">'+
							'</a><p align="right"><a href="scheda.html?id='+data.idproducts[v]+'">'+data.nome[v]+'</a></p></div><div class="clear"></div>');
							i=0;
						} else {
							$('.immagini170').append('<div class="image"><a href="scheda.html?id='+data.idproducts[v]+'" class="pfixed">'
							+'<img src="'+data.img[v]+'">'+
							'</a><p align="right"><a a href="scheda.html?id='+data.idproducts[v]+'">'+data.nome[v]+'</a></p></div>');
							i++;
						}
					}
					if (i % 4 != 0 || i<5) $('.immagini170').append('<div class="clear"></div>');
		}	
	});
}

function caricaf(parametro) {
	var filtri;
	var sport=($('.contentMenu a.active').attr('rel'));
	for (x=0;x<parametro.length;x++)
	{
		if (x==0)
		{
			cat=parametro[x];
			
		} else {
			
			if (parametro[x]!=undefined)
			{
				if (filtri==undefined)
				{
					filtri=parametro[x];
				} else {
					filtri+='_'+parametro[x];
				}
			}
		}	
	}
	$('.imgload').show();
	//Ajax
	$.getJSON('../core/sys_dna.php',  {cat: cat, fil: filtri}, function(data) {
		$('.imgload').hide();
		$('.immagini170').empty();
		if (data==null)
		{
			
			$('.immagini170').html('<div>'+noresult+'</div><div class="clear"></div>');
		} else {
				var i=0;
					for (v in data.img)
					{
						if (i % 4 == 0 && i!=0)
						{
							$('.immagini170').append('<div class="image last"><a href="scheda.html?id='+data.idproducts[v]+'" class="pfixed">'
							+'<img src="'+data.img[v]+'">'+
							'</a><p align="right"><a href="#">'+data.nome[v]+'</a></p></div><div class="clear"></div>');
							i=0;
						} else {
							$('.immagini170').append('<div class="image"><a href="scheda.html?id='+data.idproducts[v]+'" class="pfixed">'
							+'<img src="'+data.img[v]+'">'+
							'</a><p align="right"><a href="#">'+data.nome[v]+'</a></p></div>');
							i++;
						}
					}
					if (i % 4 != 0 || i<5) $('.immagini170').append('<div class="clear"></div>');
		}	
	});
}

function caricadna(par){
		
		var prm=par.split('&');
		
		//Carico miniature prodotti
		$('.imgload').show();
		$('.immagini170').empty();
		var sp=($('.contentMenu a.active').attr('rel'));
		
		carica_filtri_dna(prm[0]+'&'+prm[1]+'&'+prm[2]+'&'+prm[3]);
		var i=0;
		$.getJSON('../core/sys_dna.php',  {cat: prm[0]}, function(data) {
		$('.imgload').hide();
		i=0;
			$.cookie('cerca','no');
			for (v in data.img)
			{
				if (i % 4 == 0 && i!=0)
				{
					$('.immagini170').append('<div class="image last"><a href="scheda.html?id='+data.idproducts[v]+'" class="pfixed">'
					+'<img src="'+data.img[v]+'">'+
					'</a><p align="right"><a href="scheda.html?id='+data.idproducts[v]+'">'+data.nome[v]+'</a></p></div><div class="clear"></div>');
					i=0;
				} else {
					$('.immagini170').append('<div class="image"><a href="scheda.html?id='+data.idproducts[v]+'" class="pfixed">'
					+'<img src="'+data.img[v]+'">'+
					'</a><p align="right"><a href="scheda.html?id='+data.idproducts[v]+'">'+data.nome[v]+'</a></p></div>');
					i++;
				}
			}
			if (i % 4 != 0 || i<=4) $('.immagini170').append('<div class="clear"></div>');
		});
}



function carica(par){
		//Carico miniature prodotti
		$('.imgload').show();
		$('.immagini170').empty();
		var sp=($('.contentMenu a.active').attr('rel'));
		carica_filtri(par);
		var i=0;
		$.getJSON('../core/sys_dna.php',  {sports: sport, tipologia: tipologia, cat: par}, function(data) {
		$('.imgload').hide();
		i=0;
			for (v in data.img)
			{
				if (i % 4 == 0 && i!=0)
				{
					$('.immagini170').append('<div class="image last"><a href="scheda.html?id='+data.idproducts[v]+'" class="pfixed">'
					+'<img src="'+data.img[v]+'">'+
					'</a><p align="right"><a href="#">'+data.nome[v]+'</a></p></div><div class="clear"></div>');
					i=0;
				} else {
					$('.immagini170').append('<div class="image"><a href="scheda.html?id='+data.idproducts[v]+'" class="pfixed">'
					+'<img src="'+data.img[v]+'">'+
					'</a><p align="right"><a href="#">'+data.nome[v]+'</a></p></div>');
					i++;
				}
			}
			if (i % 4 != 0 || i<=4) $('.immagini170').append('<div class="clear"></div>');
		});
}

function returnDocument() {
        var file_name = document.location.href;
        var end = (file_name.indexOf("?") == -1) ? file_name.length : file_name.indexOf("?");
        return file_name.substring(file_name.lastIndexOf("/")+1, end);
    }



function pageload(hash)
{
	if ($.cookie('c'+hash)) {		
		var obj = JSON.parse($.cookie('c'+hash))
		var rel = obj.rel;
		var  url=returnDocument();
		var nomefile=url.split('#', 2);
		//console.log(obj.par);
		if (nomefile[0]=='dna.html')
		{
			loadproductsdna(obj.url, obj.par, 1);
		}
		else loadproducts(obj.url,obj.par,1);
	}
}


function microtime(get_as_float) {
    var now = new Date().getTime() / 1000;
    var s = parseInt(now, 10);
    return (get_as_float) ? now * 1000 : ((Math.round((now - s) * 1000) / 1000) + ' ' + s);
}
if (!this.JSON) {
    this.JSON = {};
}
(function() {
    function f(n) {
		return n < 10 ? '0' + n: n;
    }
    if (typeof Date.prototype.toJSON !== 'function') {
		Date.prototype.toJSON = function(key) {
		    return isFinite(this.valueOf()) ? this.getUTCFullYear() + '-' + f(this.getUTCMonth() + 1) + '-' + f(this.getUTCDate()) + 'T' + f(this.getUTCHours()) + ':' + f(this.getUTCMinutes()) + ':' + f(this.getUTCSeconds()) + 'Z': null;
		};
		String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function(key) {
			return this.valueOf();
		};
    }

    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
    escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
    gap, indent, meta = { // table of character substitutions
		'\b': '\\b',
		'\t': '\\t',
		'\n': '\\n',
		'\f': '\\f',
		'\r': '\\r',
		'"': '\\"',
		'\\': '\\\\'
    },
    rep;

    function quote(string) {
		escapable.lastIndex = 0;
		return escapable.test(string) ? '"' + string.replace(escapable,
		function(a) {
		    var c = meta[a];
		    return typeof c === 'string' ? c: '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice( - 4);
		}) + '"': '"' + string + '"';
    }

    function str(key, holder) {
		var i, // The loop counter.
		k, // The member key.
		v, // The member value.
		length, mind = gap,
		partial, value = holder[key];
		if (value && typeof value === 'object' && typeof value.toJSON === 'function') {
		    value = value.toJSON(key);
		}
		if (typeof rep === 'function') {
			value = rep.call(holder, key, value);
		}
		switch (typeof value) {
		case 'string':
		    return quote(value);
		case 'number':
		    return isFinite(value) ? String(value) : 'null';
		case 'boolean':
		case 'null':
		    return String(value);
		case 'object':
			if (!value) {
				return 'null';
			}
		    gap += indent;
			partial = [];
			if (Object.prototype.toString.apply(value) === '[object Array]') {
				length = value.length;
				for (i = 0; i < length; i += 1) {
					partial[i] = str(i, value) || 'null';
				}
				v = partial.length === 0 ? '[]': gap ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']': '[' + partial.join(',') + ']';
				gap = mind;
				return v;
			}
		    if (rep && typeof rep === 'object') {
				length = rep.length;
				for (i = 0; i < length; i += 1) {
				    k = rep[i];
				    if (typeof k === 'string') {
						v = str(k, value);
						if (v) {
						    partial.push(quote(k) + (gap ? ': ': ':') + v);
						}
				    }
				}
		    } else {
				for (k in value) {
					if (Object.hasOwnProperty.call(value, k)) {
						v = str(k, value);
						if (v) {
							partial.push(quote(k) + (gap ? ': ': ':') + v);
						}
					}
				}
			}
			v = partial.length === 0 ? '{}': gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}': '{' + partial.join(',') + '}';
		    gap = mind;
			return v;
		}
	}
	
    if (typeof JSON.stringify !== 'function') {
		JSON.stringify = function(value, replacer, space) {
			var i;
			gap = '';
			indent = '';
		    if (typeof space === 'number') {
				for (i = 0; i < space; i += 1) {
					indent += ' ';
				}
		    }
			else if (typeof space === 'string') {
				indent = space;
			}
		    rep = replacer;
			if (replacer && typeof replacer !== 'function' && (typeof replacer !== 'object' || typeof replacer.length !== 'number')) {
				throw new Error('JSON.stringify');
		    }
		    return str('', {
				'': value
			});
		};
    }
    if (typeof JSON.parse !== 'function') {
		JSON.parse = function(text, reviver) {
			var j;
			function walk(holder, key) {
				var k, v, value = holder[key];
				if (value && typeof value === 'object') {
				    for (k in value) {
						if (Object.hasOwnProperty.call(value, k)) {
							v = walk(value, k);
							if (v !== undefined) {
								value[k] = v;
							} else {
								delete value[k];
							}
						}
				    }
				}
				return reviver.call(holder, key, value);
			}
		    text = String(text);
		    cx.lastIndex = 0;
		    if (cx.test(text)) {
				text = text.replace(cx,
				function(a) {
				    return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice( - 4);
				});
		    }
			if (/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
				j = eval('(' + text + ')');
				return typeof reviver === 'function' ? walk({ '': j},'') : j;
		    }
			throw new SyntaxError('JSON.parse');
		};
    }
} ());

