﻿/*
 * Allows only valid characters to be entered into input boxes.
 * Note: does not validate that the final text is a valid number
 * (that could be done by another script, or server-side)
 *
 * @name     numeric
 * @param    decimal      Decimal separator (e.g. '.' or ',' - default is '.')
 * @param    callback     A function that runs if the number is not valid (fires onblur)
 * @author   Sam Collett (http://www.texotela.co.uk)
 * @example  $(".numeric").numeric();
 * @example  $(".numeric").numeric(",");
 * @example  $(".numeric").numeric(null, callback);
 *
 */
jQuery.fn.numeric = function(decimal, callback)
{
	decimal = decimal || ".";
	callback = typeof callback == "function" ? callback : function(){};
	this.keypress(
		function(e)
		{
			var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
			// allow enter/return key (only when in an input box)
			if(key == 13 && this.nodeName.toLowerCase() == "input")
			{
				return true;
			}
			else if(key == 13)
			{
				return false;
			}
			var allow = false;
			// allow Ctrl+A
			if((e.ctrlKey && key == 97 /* firefox */) || (e.ctrlKey && key == 65) /* opera */) return true;
			// allow Ctrl+X (cut)
			if((e.ctrlKey && key == 120 /* firefox */) || (e.ctrlKey && key == 88) /* opera */) return true;
			// allow Ctrl+C (copy)
			if((e.ctrlKey && key == 99 /* firefox */) || (e.ctrlKey && key == 67) /* opera */) return true;
			// allow Ctrl+Z (undo)
			if((e.ctrlKey && key == 122 /* firefox */) || (e.ctrlKey && key == 90) /* opera */) return true;
			// allow or deny Ctrl+V (paste), Shift+Ins
			if((e.ctrlKey && key == 118 /* firefox */) || (e.ctrlKey && key == 86) /* opera */
			|| (e.shiftKey && key == 45)) return true;
			// if a number was not pressed
			if(key < 48 || key > 57)
			{
				/* '-' only allowed at start */
				//if(key == 45 && this.value.length == 0) return true;
				/* only one decimal separator allowed 
				if(key == decimal.charCodeAt(0) && this.value.indexOf(decimal) != -1)
				{
					allow = false;
				}*/
				// check for other keys that have special purposes
				if(
					key != 8 /* backspace */ &&
					key != 9 /* tab */ &&
					key != 13 /* enter */ &&
					key != 35 /* end */ &&
					key != 36 /* home */ &&
					key != 37 /* left */ &&
					key != 39 /* right */ &&
					key != 46 /* del */
				)
				{
					allow = false;
				}
				else
				{
					// for detecting special keys (listed above)
					// IE does not support 'charCode' and ignores them in keypress anyway
					if(typeof e.charCode != "undefined")
					{
						// special keys have 'keyCode' and 'which' the same (e.g. backspace)
						if(e.keyCode == e.which && e.which != 0)
						{
							allow = true;
						}
						// or keyCode != 0 and 'charCode'/'which' = 0
						else if(e.keyCode != 0 && e.charCode == 0 && e.which == 0)
						{
							allow = true;
						}
					}
				}
				if (this.value.length == 1 && (key == 8 || key == 46)) 
				    {allow = false;}
				// if key pressed is the decimal and it is not already in the field
//				if(key == decimal.charCodeAt(0) && this.value.indexOf(decimal) == -1)
//				{
//					allow = false;
//				}
			}
			else
			{
				allow = true;
			}
			return allow;
		}
	)
	.blur(
		function()
		{
			var val = jQuery(this).val();
			if(val != "")
			{
				var re = new RegExp("^\\d+$|\\d*" + decimal + "\\d+");
				if(!re.exec(val))
				{
					callback.apply(this);
				}
			}
			else{jQuery(this).val("0");}
		}
	);
	return this;
}

// JScript File
    
var path = "http://www.manufacturasmedrano.com/";
var path2 = "";

//var path = "http://localhost:4053/";
//var path2 = "medranoW/";

//var path = "http://localhost/";
//var path2 = "";

var pname = location.pathname.toUpperCase();
var esHome = 0;
var listas = 0;
cargaJS();

var objConf = new Array();

$(document).bind("contextmenu",function(e){
	return false;
});


function esIE6(){
    if(jQuery.browser.msie && parseInt(jQuery.browser.version) == 6)
    {return "&ie6=1";}
    else
    {return "&ie6=0";}
}

function agregar(){
    var url="http://www.manufacturasmedrano.com";
    var titulo="Manufacturas Medrano";
//    if (document.all)
//        window.external.AddFavorite(url,titulo);
	if (window.sidebar) { // Mozilla Firefox 
		window.sidebar.addPanel(titulo, url,"");
	} else if( window.external ) { // IE 
		window.external.AddFavorite( url, titulo); }
	else if(window.opera && window.print) { // Opera
		return true; }
}

function ImportJS() {
	    var nbr_att = arguments.length;
	    var js_effets=document.createElement("script");
	    js_effets.setAttribute("type", "text/javascript");
	    js_effets.setAttribute("src", arguments[0]);
	    if(nbr_att>1){
		    for (var i = 1; i<nbr_att; i++){
			    js_effets.setAttribute(arguments[i][0], arguments[i][1]);
		    }
	    }
	    document.getElementsByTagName("head")[0].appendChild(js_effets);
        //Ejemplo de uso genérico
        //ImportJS(”menu.js”); 
    }

    function overPrev(obj)
    {
        var newimg = $(obj).find("img")[0].src;
        $($(obj).parent().parent().parent().find(".imgFinal")[0]).css("background-image", 
            "url(" + path + path2 + "mini.aspx?Image=" + newimg.replace(path,"") + ")");     
    }

        function abreGal(id)
    {
        //$("#dialogGal").dialog("destroy").remove();
        //$("#todo").fadeTo("fast", 0.5);
        //$("#todo").fadeOut("fast");
        //$("#todo").hide();
        
        document.getElementById("gal").src = "gallerific/gal.aspx?id=" + id;
        //$("#dialogGal").dialog({ width:800, height:600, modal:true});//.dialogOpen();
        //jQuery.facebox($("#dialogGal"));
    }

    function abreConf(id)
    {
        var html = $.ajax({ url: path + path2 + "detConf.aspx?id=" + id,  
        async: false}).responseText;
        //***************************        
        getConf(id);
        jQuery.facebox(html);
		cargaTablaConf();
        if ($(".sss").length > 0) $(".sss").scrollable();
        if ($(".sssB").length > 0) $(".sssB").scrollable({size : 2});
		$("#addConfig").click(function(){
			var valores = "";
			var campos = "";
			var key = "";

			//$(this).parent().find("select").each(function(){
			$("#cajaDialog").find("select").each(function(){
				if (valores != "") valores += ",";
				if (campos != "") campos += ",";
				if (key != "") key += "/";
				campos += '"' + this.name + '"';
				valores += '"' + this.value + '"';
				key += this.value;
			})
			
			$("#cajaDialog").find("input[type=text]").each(function(){
			    if ($(this).parent().attr("class") != "cajaAdd" ) {
				    if (valores != "") valores += ",";
				    if (campos != "") campos += ",";
				    if (key != "") key += "/";
				    campos += '"' + this.name + '"';
				    valores += '"' + this.value + '"';
				    key += this.value;
				}
			})
			
			seltxt = '{"KEY":"' + key + '", "cantidad":"1", "campos":[' + campos + '], "valores":[' + valores + ']}';
			var lin = eval('(' + seltxt +')');
			// comprobar si existe la key
			var posicion = -1;
			$.each( objConf, function(i, n){
			  if (this.KEY == key) posicion = i;
			});
			
			if (posicion == -1){
				$.merge( objConf, [lin] );
				setConf(key,1);
			}					
			//console.log(tableHTML);			
		});
        //$(".imgPic").Tooltip({showURL: false, opacity: 0.80});
        //***************************
    }

    function abreFicha(id)
    {
        var html = $.ajax({ url: path + path2 + "detProd.aspx?id=" + id,  
        async: false}).responseText;
        jQuery.facebox(html);
    }

    function abreDetalle(id)
    {
//        var html = $.ajax({ url: path + path2 + "detProd.aspx?id=" + id,  
//        async: false}).responseText;
//        
//        $("#dialogDetalle").html(html);
//        $("#dialogDetalle").dialog({ width:600, height:450 }).dialogOpen();
    }

    function sinHijos(id)
    {
//        var html = "";
//        if (id != ".aspx") html = $.ajax({ url: path + path2 + "sinHijos.aspx?id=" + id, async: false}).responseText;
//        return html;
          return "1";
//        if (html == "0"){       
//            return true;
//        }
//        else {
//            return false;
//        }
    }

    function quitMouseOver(clase)
    {
        $(clase).each(function(i){
            $(this).attr("onmouseover", "");
        });
    }

    function tieneSelects(obj)
    {
        var tiene = false;
        if ($(obj).parent().parent().parent().find("select").length > 0) tiene=true;
        return tiene;
    }

//    function pruebaJson()
//    {
//        $.ajax({
//          type: "POST",
//          //contentType: "application/json; charset=utf-8",
//          url: path + path2 + "addConf.aspx",
//          //data: 'txt=[{[{"KEY":"Propio del Matñerial/aaa","cantidad":3,"campos":["SelColores1","aaaa"],"valores":["Propio del Matñerial","aaa"]}}]&id=11075',
//          data: "id=11075&txt=1234"//, dataType: "json"
//        });        
//    }

    function selects(id, obj)
    {
        //var seltxt = "";
        //$(obj).parent().parent().find("select").each(function(){
        //    seltxt += "[[" + this.name + ":" + this.value + "]]";
        //})
        //var html = $.ajax({ url: path + path2 + "addConf.aspx?txt=" + seltxt + "&id=" + id,  
        //async: false}).responseText;
        var txtObj = JSONstring.make(objConf);

//        var html = $.ajax({url: path + path2 + "addConf.aspx?txt=" + txtObj + "&id=" + id,  
//        async: false}).responseText;

        $.ajax({
          type: "POST",
          //contentType: "application/json; charset=utf-8",
          url: path + path2 + "addConf.aspx",
          data: "txt=" + txtObj + "&id=" + id //, dataType: "json"
        });        
    }

    function setEnvio(env)
    {
        var html = $.ajax({ url: path + path2 + "setEnvio.aspx?e=" + env,  
        async: false}).responseText;

        var html2 = $.ajax({ url: path + path2 + "getResumen.aspx",  
        async: false}).responseText;
        $("#ctl00_ContentPlaceHolder1_lblCarroDetalle").html(html2);
        $(".unidCart").numeric();
        $(".unidCart").blur( function() {setProd($(this).attr("idProd"),$(this).val(), this);} );
        
        // rehacer todos los hover!!!
        // over del menuhijos (donde aparece la foto y la descripcion)
        $(".detHijo").hover(function(){
            var idPro = $(this).attr("idPro");
            HJXDetProd(idPro, this);
        },function(){
            $("#overMenuHijos").hide();
        });
    
        $(".cajaAdd input").keypress(function(e) {
            if (e.which == 13) { 
                $(this).blur();
                return false;
            }
        });
    
        $(".cajaAdd input").numeric();
        
        $(".cajaAdd").hover(function(){
                $(this).parent().parent().find(".descDiv").show();
        },function(){
                $(this).parent().parent().find(".descDiv").hide();
        });

        $(".cajaTar").hover(function(){
                $(this).parent().parent().find(".descDiv").show();
        },function(){
                $(this).parent().parent().find(".descDiv").hide();
        });
            
    }

    function addProd(id, cantidad, obj)
    {
        var canti = parseInt(cantidad);
        if (isNaN(canti)) canti = 0;        
        
        selects(id, obj);
        var html = $.ajax({ url: path + path2 + "addProd.aspx?c=" + canti + "&id=" + id,  
        async: false}).responseText;
        $("#ctl00_Cart1_LoginView1_Label1").html(html);
        
        if ($("#ctl00_ContentPlaceHolder1_lblCarroDetalle").length == 1){
            var html2 = $.ajax({ url: path + path2 + "getResumen.aspx",  
            async: false}).responseText;
            $("#ctl00_ContentPlaceHolder1_lblCarroDetalle").html(html2);
            $(".unidCart").numeric();
            $(".unidCart").blur( function() {setProd($(this).attr("idProd"),$(this).val(), this);} );
            
            // rehacer todos los hover!!!
            // over del menuhijos (donde aparece la foto y la descripcion)
            $(".detHijo").hover(function(){
                var idPro = $(this).attr("idPro");
                HJXDetProd(idPro, this);
            },function(){
                $("#overMenuHijos").hide();
            });
        
            $(".cajaAdd input").keypress(function(e) {
                if (e.which == 13) { 
                    $(this).blur();
                    return false;
                }
            });
        
            $(".cajaAdd input").numeric();
            
            $(".cajaAdd").hover(function(){
                    $(this).parent().parent().find(".descDiv").show();
            },function(){
                    $(this).parent().parent().find(".descDiv").hide();
            });

            $(".cajaTar").hover(function(){
                    $(this).parent().parent().find(".descDiv").show();
            },function(){
                    $(this).parent().parent().find(".descDiv").hide();
            });
            
        
        }
        else
        {
            // traerse el nuevo precio dependiendo de la cantidad
            var html3 = $.ajax({ url: path + path2 + "getPrec.aspx?id=" + id,  
            async: false}).responseText;
            var colprec = $(obj).parent().parent().parent().find(".colPrecio span").attr("class");
            if (colprec != "tar2") $("." + colprec).html(html3);
            
//            $(this).replaceWith("<img class='listaAJAX lista" + id + "' idProd='" + id + "' src='img\27.gif' alt='' />");
//            listas = 1;
//            getTablaAjaxb(id);

        }
    }

    function setProd(id, cantidad, obj)
    {
	        var canti = parseInt(cantidad);
	        if (isNaN(canti)) canti = 0;
    
        var html = $.ajax({ url: path + path2 + "setProd.aspx?c=" + canti + "&id=" + id,  
        async: false}).responseText;
//        $("#ctl00_ContentPlaceHolder1_lblCarroDetalle").html(html);
        // establecer el mouse over
//        $(".unidCart").blur( function() {setProd($(this).attr("idProd"),$(this).val(), this);} );
        
        addProd(id, 0, obj);
        
        //$("tr:nth-child(even)").addClass("odd");
        //$($("#cabTbAgrupar").children()[0]).addClass("BusFirstCell");
    }

    function setProdFinal(obj)
    {
        var html = $.ajax({ url: path + path2 + "setProd.aspx?c=" + $(obj).val() + "&id=" + $(obj).attr("idProd"),  
        async: false}).responseText;
        addProd($(obj).attr("idProd"), 0, obj);
    }

//    function getTablaAjax(obj)
//    {
//        var id = $(obj).attr("idProd");
//        var html = $.ajax({ url: path + path2 + "GetTbCampos.aspx?id=" + id,  
//        async: false}).responseText;
//        $(".lista" + id).after(html);
//        $(".lista" + id).remove();
//    }

    function getTablaAjaxb(id)
    {
        $.ajax({ url: path + path2 + "GetTbCampos.aspx?id=" + id,  
        async: true,
        success: function(datos){
            $(".lista" + id).after(datos);
            $(".lista" + id).remove();
            listas = listas - 1;
            if ($("#idiom").val() == "2") $(".irCart").css("backgroundImage","url('UserFiles/Image/botones/VER-PEDIDO-ING.png')");
            if (listas == 0) parseTablaAjax();
        }
        });
    }

    function getTablaAjax(obj)
    {
        var id = $(obj).attr("idProd");
        getTablaAjaxb(id);
    }

    function HJXhijosSub(id, obj)
    {
        var html = $.ajax({ url: path + path2 + "HJXhijosSub.aspx?app=hsm&id=" + id,  
        async: false}).responseText;
        var offset = $(obj).offset();
        $("#subDiv").html(html);
        $("#subDiv").css("left", offset.left - $("#todo").offset().left + 5);
        $("#subDiv").css("top", offset.top + 11);        
        $("#subDiv").show();
    }

    function cargando(id)
    {
        // esto queda comentado a la espera de decidir si es necesaria la carga AJAX del CATALOGO
        // a cambio dejo un simple redirect
        location.href = "Productos.aspx?id=" + id;
//        $("#imgCargando").fadeIn(200,function(){
//            $.ajax({ url: path + path2 + "HJXproductos.aspx?id=" + id, 
//                error: $("#imgCargando").fadeOut(500),  // aqui podria venir un redirect a Productos.aspx?id= id
//                cache: false, success: function(html){
//                    HJXDetalleHijos(html);
//                    $("#imgCargando").fadeOut(500);
//                  }
//            });
//        });    
    }

    function HJXDetalleHijos(html)
    {
        $("#pie").hide();
        //$("#detalleHijos").hide();
        $("#rowUnica").remove();
        $("#DetalleHijos1_lblHTML").remove();
        $("#ctl00_ContentPlaceHolder1_DetalleHijos1_lblHTML").remove();
        html = "<div id='divpru'>" + html + "</div>"
        
        $("#pie").after(html);
        
        //$("#divpru #lblTitulo").text();
        $(".lbldesc").after($("#divpru #detalle").html());
        $("#detalleHijos #pathDiv").html($("#divpru #pathDiv").html());
        $("#menuHijos .tbORGx").html($("#divpru #menu .tbORGx").html());
        $("#ctl00_ContentPlaceHolder1_lblTit").text($("#divpru #lblTitulo").text());
        $("#ctl00_ContentPlaceHolder1_lblDesc").text($("#divpru #lblDesc").text());
        $("#ctl00_ContentPlaceHolder2_lblTitMenu").html("<br />" + $("#divpru #lblTitulo").text());
        $("#ctl00_ContentPlaceHolder2_Image1").attr("src", $("#divpru #Image1").attr("src"));
        $("#ctl00_ContentPlaceHolder2_lblGalMini").html($("#divpru #lblGalMini").html());
        $("#wrapRel").html($("#divpru #relacionados").html());
        $("#wrapUltimos").html($("#divpru #ultimos").html());
        $("#subcabecera a").removeClass("orange");
        $("#tit" + $("#divpru #familia").text()).addClass("orange");
        
        $("#divpru").remove();
        
        //$(".lbldesc").after($(html).find("#detalle").html());
        //$("#pathDiv").html($(html).find("#pathDiv").html());
        //$("#menuHijos .tbORG").html($(html).find("#menu .tbORG").html());
        //$("#ctl00_ContentPlaceHolder1_lblTit").text($(html).find("#lblTitulo").text());
        //$("#ctl00_ContentPlaceHolder1_lblDesc").text($(html).find("#lblDesc").text());
        //$("#ctl00_ContentPlaceHolder2_lblTitMenu").html("<br />" + $(html).find("#lblTitulo").text());
        //$("#ctl00_ContentPlaceHolder2_Image1").attr("src", $(html).find("#Image1").attr("src"));
        //$("#ctl00_ContentPlaceHolder2_lblGalMini").html($(html).find("#lblGalMini").html());
        //$("#wrapRel").html($(html).find("#relacionados").html());
        //$("#subcabecera a").removeClass("orange");
        //$("#tit" + $(html).find("#familia").text()).addClass("orange");
        
        parseProd();
        //$("#detalleHijos").slideDown(200);
        //$("#detalleHijos").show(200);
        //$("#pie").show();
        //$("#pie").css("top", $(document).height());
    }

    function HJXDetProd(id, obj)
    {
        var html = $.ajax({ url: path + path2 + "HJXhijosSub.aspx?app=detH&id=" + id,  
        async: false}).responseText;
        var offset = $(obj).offset();
        $("#overMenuHijos").html(html);
        if (offset.left > 700) 
            {$("#overMenuHijos").css("left", offset.left - 75);}
        else {
            if (offset.left < 175) {
                $("#overMenuHijos").css("left", 120);
            }
            else{$("#overMenuHijos").css("left", offset.left + 20);}
        }
        $("#overMenuHijos").css("top", offset.top + 18);
        $("#overMenuHijos").fadeIn(200);
    }

		function getPageSize() {
			var xScroll, yScroll;
			if (window.innerHeight && window.scrollMaxY) {	
				xScroll = window.innerWidth + window.scrollMaxX;
				yScroll = window.innerHeight + window.scrollMaxY;
			} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
				xScroll = document.body.scrollWidth;
				yScroll = document.body.scrollHeight;
			} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
				xScroll = document.body.offsetWidth;
				yScroll = document.body.offsetHeight;
			}
			var windowWidth, windowHeight;
			if (self.innerHeight) {	// all except Explorer
				if(document.documentElement.clientWidth){
					windowWidth = document.documentElement.clientWidth; 
				} else {
					windowWidth = self.innerWidth;
				}
				windowHeight = self.innerHeight;
			} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
				windowWidth = document.documentElement.clientWidth;
				windowHeight = document.documentElement.clientHeight;
			} else if (document.body) { // other Explorers
				windowWidth = document.body.clientWidth;
				windowHeight = document.body.clientHeight;
			}	
			// for small pages with total height less then height of the viewport
			if(yScroll < windowHeight){
				pageHeight = windowHeight;
			} else { 
				pageHeight = yScroll;
			}
			// for small pages with total width less then width of the viewport
			if(xScroll < windowWidth){	
				pageWidth = xScroll;		
			} else {
				pageWidth = windowWidth;
			}
			arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
			return arrayPageSize;
		};

		function getPageScroll() {
			var xScroll, yScroll;
			if (self.pageYOffset) {
				yScroll = self.pageYOffset;
				xScroll = self.pageXOffset;
			} else if (document.documentElement && document.documentElement.scrollTop) {	 // Explorer 6 Strict
				yScroll = document.documentElement.scrollTop;
				xScroll = document.documentElement.scrollLeft;
			} else if (document.body) {// all other Explorers
				yScroll = document.body.scrollTop;
				xScroll = document.body.scrollLeft;	
			}
			arrayPageScroll = new Array(xScroll,yScroll) 
			return arrayPageScroll;
		};

	function cajaAddConf(key, cantidad)
	{
	        var canti = parseInt(cantidad);
	        if (isNaN(canti)) canti = 0;
	
		var valor = "<div class=\"cajaAdd\"><input onblur=\"setConf('" + key + "',  $(this).val()); return false;\" idprod=\"" + key + "\" id=\"cajaUd" + key + "\" value=\"" + canti + "\" type=\"text\">" + "</div><div class=\"cajaAdd\"><span idpro=\"" + key + "\" onclick=\"addConf('" + key + "', 1); return false;\" >" + "<img class=\"cajaAddimg\" width=\"13\" height=\"13\" border=\"0\" src=\"img/qty-plus.gif\"/></span>" + "<span idpro=\"" + key + "\" onclick=\"addConf('" + key + "', -1); return false;\">" + "<img class=\"cajaAddimg\" width=\"13\" height=\"13\" border=\"0\" src=\"img/qty-min.gif\"/></span></div>";
		return valor;
	}
	
	function borraKey(key)
	{
	    objConf = $.grep(objConf, function(n){
                          if (n.KEY == key)
                          {return false;}
                          else {return true;}
                    });
	}
	
	function setProdConf(cantidad)
	{
        var idcaja = "#cajaUd" + $("#addConfig").attr("idProd"); 
        var canti = parseInt(cantidad);
        if (isNaN(canti)) canti = 0;
        $(idcaja).val(canti);
        //************************ comentado para depurar la desaparicion de los iconos
        setProdFinal($(idcaja));
	}
	
	function setConf(key, cantidad)
	{
	        var canti = parseInt(cantidad);
	        if (isNaN(canti)) canti = 0;
			var total = 0;
			$.each( objConf, function(i, n){
			  if (this.KEY == key) 
			  {
				this.cantidad = canti;
			  }
			  total += parseInt(this.cantidad);
			});
			if (canti == "0") borraKey(key);
						
			setProdConf(total);
			
			cargaTablaConf();
	}	
	
	function addConf(key, cantidad)
	{
	        var canti = parseInt(cantidad);
	        if (isNaN(canti)) canti = 0;
	
		    var ct = 0;
		    var total = 0;
		    $.each( objConf, function(i, n){
		      if (this.KEY == key) 
		      {
			    this.cantidad = parseInt(this.cantidad) + canti;
			    ct = this.cantidad;
		      }
		      total += parseInt(this.cantidad);
		    });
		    if (ct == "0") borraKey(key);
		    setProdConf(total);
		    cargaTablaConf();
		    		    
	}
	
	function getConf(id)
	{
	    objConf = new Array();
        var html = $.ajax({ url: path + path2 + "GetConf.aspx?id=" + id,  
        async: false}).responseText;
        if (html != "") {
            objConf = eval('(' + html + ')');
            cargaTablaConf();
        }
	}
	
	function cargaTablaConf()
	{
	
            //var idpro = $("#addConfig").attr("idProd");
			var tableHTML = "<table>";
			
			$.each( objConf, function(i, n){
			    // meter la cabecera de la tabla solo cuando i = 0
			    if (i==0){
				    tableHTML +="<tr id=\"cabTbAgrupar\">"; //"<td>Código</td>";
				    $.each( this.campos, function(iii, nnn){
					    tableHTML +="<td>" + nnn + "</td>";
				    });
				    //tableHTML += "<td>Precio</td>";
				    tableHTML += "<td><span class=\"headAdd\">Añadir</span></td></tr>";
				}

				tableHTML +="<tr>";
				//tableHTML += "<td>" + $(".CODConf").text() + "</td>";				
				$.each( this.valores, function(ii, nn){
					tableHTML +="<td>" + nn + "</td>";
				});
				//tableHTML += "<td>" + $(".tarConf").html() + "</td>";
				tableHTML +="<td>" + cajaAddConf(this.KEY, this.cantidad) +
				"<img src=\"img/delete2.png\" onclick=\"setConf('" + this.KEY + "',0)\" style=\"width: 16px; height: 16px; padding: 5px 0px 0px 8px; cursor: pointer;\" alt=\"\"/>" +
				 "</td>";
				tableHTML +="</tr>";
			});
			tableHTML += "</table>";
			
			$("#divTable").remove();

			$("#addConfig").after("<div class=\"tbORG\" id=\"divTable\">" + tableHTML + "</div>");
            
            parseProd();
	}

    function cargaCycles(){
    
        var htmlImgs = $('#s1').html();
        $('#s1').remove();
        $('body').append('<div id="jquery-overlay"></div><div id="jquery-lightbox"><div id="lightbox-container-image-box"><div id="lightbox-container-image"><div id="s1" class="pics">' + htmlImgs + '</div></div></div></div>');
		$('#lightbox-container-image-box').css({
			backgroundColor:	'transparent'
        });
        var arrPageSizes = getPageSize();
		$('#jquery-overlay').css({
			backgroundColor:	'#000000',
			opacity:			0.8,
			width:				arrPageSizes[0],
			height:				arrPageSizes[1]
		}).fadeIn();
		var arrPageScroll = getPageScroll();
		$('#jquery-lightbox').css({
			top:	arrPageScroll[1] + (arrPageSizes[3] / 10),
			left:	arrPageScroll[0]
		}).show();
		// Assigning click events in elements to close overlay
		$('#jquery-overlay,#jquery-lightbox').click(function() {
			$('#jquery-lightbox').remove();
			$('#jquery-overlay').fadeOut(function() { $('#jquery-overlay').remove(); });
			// Show some elements to avoid conflict with overlay in IE. These elements appear above the overlay.
			$('embed, object, select').show();
		});

        $('#s1').cycle({ 
            fx:     'fade', 
            speed:   600, 
            timeout: 3000, 
            next:   '#s1', 
            pause:   1 
        });        
    }

    function parseProd()
    {
        
        $("#DetalleHijos1_DataList1 tr td").each(function(i){
                  $("#rowUnica").append(this.innerHTML);
            });
        $("#DetalleHijos1_DataList1").remove();


//        if ($(document).width() > 1550) 
//        {
//            $("#detalleHijos").css("width", "760px");
//            $(".spanB").css("width", "220px");
//            $(".finalDet").css("padding-left", "16px");
//            $("#Relacionados1_relDiv").addClass("relDivL");
//            //$("#ultimosVistos").addClass("relDivM");
//            //$("#banner").addClass("relDivN");
//            //$(".relDivM").corner("tr br 15px");
//            //$(".relDivL").corner("tr br 15px");
//            $("#relB").addClass("relB");
//        }


        $(".imgFinal").css({cursor: "pointer" });
        $(".imgFinal").click( function() { 
            //location.href = "Productos.aspx?id=" + $(this).attr("idProd");  
            cargando($(this).attr("idProd"));
        } );

        $(".spanSub").hover(function(){
            //if ($(this).attr("class") == "spanB"){
                $(this).find(".titFinal").addClass("overBack");
            //}
            //$(this).animate({backgroundColor : '#FDEDCB'}, "fast");
        },function(){
            //if ($(this).attr("class") == "spanB"){
                $(this).find(".titFinal").removeClass("overBack");
            //}else{
    //            $(this).css("background-color", "#FFFFFF");
    //            $(this).css("border-color", "#FFFFFF");
            //}
        });
        
        $(".cajaAdd input").numeric();
        
        $(".cajaAdd").hover(function(){
                $(this).parent().parent().find(".descDiv").show();
        },function(){
                $(this).parent().parent().find(".descDiv").hide();
        });

        $(".cajaTar").hover(function(){
                $(this).parent().parent().find(".descDiv").show();
        },function(){
                $(this).parent().parent().find(".descDiv").hide();
        });


        $("#pathDiv").mouseout( function() { $("#subDiv").hide(); } );
        $(".submenu").hover(function(){
            var href = $(this).attr("href");
            HJXhijosSub(href.substring(href.length - 5), this);
            $(this).css({color: "#C95555" });
        },function(){
            $(this).css({color: "#666666" });
        });
    
        // over del menuhijos (donde aparece la foto y la descripcion)
        $(".detHijo").hover(function(){
            var idPro = $(this).attr("idPro");
            HJXDetProd(idPro, this);
        },function(){
            $("#overMenuHijos").hide();
        });

        //$("#menuHijos").corner("br 15px");
        $("#galMini a").Tooltip({showURL: false, opacity: 0.85});
        $(".tooltip").Tooltip({showURL: false, opacity: 0.60});


        $("tr:nth-child(0)").addClass("odd");
        $($("#cabTbAgrupar").children()[0]).addClass("BusFirstCell");

        //$(".bodyHome tr:first-child td").addClass("firstRow");

        $("a").each(function(i){
            var href = $(this).attr("href");
            if (! href) return false;
            if (href.indexOf("Productos.aspx") != -1) {
                var id = href.substring(href.length - 5);
//                var hijos = sinHijos(id);
//                if (hijos == "0"){
                    if ($(this).attr("class") == "add")
                        {
                            $(this).click( function() { 
	                            addProd(id, 1, this); 
                                return false;
	                        });
	                    }
	                    else
	                    {
	                        // para poner los links de los listados de CODs para que abran el dialogo
	                        var clsPadre = $(this).parent().attr("class");
	                        if (clsPadre == "colDesc" || clsPadre == "colCOD" )
	                        {
                                $(this).click( function() { 
        	                        abreDetalle(id); 
                                    return false;
        	                    });
	                        }
	                    }
            }   
        });
        
        
        $(".submenu").click( function() { 
            cargando($(this).attr("idpro"));
            return false;
        } );
        
        // para destacar la columna precio cuando este destacada la de descripcion
        $(".DestTags").parent().siblings(".colPrecio").css("color", "#C92E39").find("div:first").css("color", "black");
        
        $(".irCart").click(function() {
            if ($(this).hasClass("closeface") == false) location.href = "detalleCart.aspx";
        });
    

    }
    
    function cargaJS()
    {
        // carga selectiva de librerias js
        // para identificar la pagina location.pathname = "/Inicio.aspx"
        if (location.href.toUpperCase().indexOf("NAV=CATALOGO") > 0) esHome = 1;
        if (location.href.toUpperCase() == path.toUpperCase() + path2.toUpperCase()) esHome = 1;
        
        if ((pname == "/" + path2.toUpperCase() + "PRODUCTOS.ASPX") || (pname == "/" + path2.toUpperCase() + "NOTICIAS.ASPX"))
        {
            if (esHome == 0) ImportJS("jquerylightbox031.js");
        }     
        
        if (esHome == 0) 
        {
//            ImportJS("jquery.bgiframe.min.js");
//            ImportJS("jqueryUI10/jquery.dimensions.js");
//            ImportJS("facebox/facebox.js");
//            //ImportJS("jquery.tooltip.pack.js");
//            ImportJS("jquery.ajaxQueue.js");
//            //ImportJS("jquery.autocomplete.js");
        }
        
        if ((pname == "/" + path2.toUpperCase() + "NOTICIAS.ASPX"))
        {
    // lo comento hasta que tengamos claro como hacer esto de las noticias.
    //        ImportJS("jquery.cycle.all.pack.js");
        }      
    
    }

    function parseTablaAjax()
    {
        $(".cajaAdd input").keypress(function(e) {
            if (e.which == 13) { 
                $(this).blur();
                return false;
            }
        });

        $(".unidCart").numeric();
        $(".unidCart").blur( function() {setProd($(this).attr("idProd"),$(this).val(), this);} );

	    $("#addConfig").each(function(i){ 
	        getConf($(this).attr("idProd")); 
	    });
	    
		$("#addConfig").click(function(){
			var valores = "";
			var campos = "";
			var key = "";			
			$("#cajaDialog").find("select").each(function(){
				if (valores != "") valores += ",";
				if (campos != "") campos += ",";
				if (key != "") key += "/";
				campos += '"' + this.name + '"';
				valores += '"' + this.value + '"';
				key += this.value;
			})
			
			$("#cajaDialog").find("input[type=text]").each(function(){
			    if ($(this).parent().attr("class") != "cajaAdd" ) {
				    if (valores != "") valores += ",";
				    if (campos != "") campos += ",";
				    if (key != "") key += "/";
				    campos += '"' + this.name + '"';
				    valores += '"' + this.value + '"';
				    key += this.value;
				}
			})
			
			
			seltxt = '{"KEY":"' + key + '", "cantidad":"1", "campos":[' + campos + '], "valores":[' + valores + ']}';
			var lin = eval('(' + seltxt +')');
			
			// comprobar si existe la key
			var posicion = -1;
			$.each( objConf, function(i, n){
			  if (this.KEY == key) posicion = i;
			});
			if (posicion == -1){
				$.merge( objConf, [lin] );
				setConf(key,1);
			}
			
			//objConf to tabla
			cargaTablaConf();
			
			//console.log(tableHTML);
		});
        
        

        
        parseProd();

    }    

function traducir()
{
    
    $(".titTienda a").text("Online Store");
    $("#ctl00_LoginView2_Login1_UserNameLabel").text("Email");
    $("#ctl00_LoginView2_Login1_PasswordLabel").text("Password");
    $(".chkLog label").text("Remember on this computer");
    $(".recPass").text("I´ve forgotten my password");
    $(".usrn").text("New user");
    $(".recPass2").text("Register");
    $(".titTiendaPrivada").text(" Private zone ");
    $("#cajaTiendaPublica .titTiendaPrivada").text("Public zone");    
    $("#ctl00_LoginView2_lblZonaPrivada").text("Private zone");
    $("#ctl00_LoginView2_LoginStatus1").text("Logout");
    $(".titBus").text("Search Product");
    $(".subtitBus").text("Search name or code");
    
    // ***** Imagenes y botones *****
    // poner aqui el boton en inglis
    $(".cajasAmigo").css("backgroundImage","url('UserFiles/Image/botones/DatosAmigoIng.png')");
    $(".cajasSusDatos").css("backgroundImage","url('UserFiles/Image/botones/SusDatosIng.png')");
    $("#cajaLogeado").css("backgroundImage","url('UserFiles/Image/botones/ZONA-PRIVADA-INGLES.png')");
    $(".irCart").css("backgroundImage","url('UserFiles/Image/botones/VER-PEDIDO-ING.png')");
    $(".enviaDistri").attr("src","UserFiles/Image/botones/ENVIAR-INGLES.png");
    $("#ctl00_ContentPlaceHolder1_ImageButton2").attr("src","UserFiles/Image/botones/ENVIAR-INGLES.png");    
    $(".btnEnviarRecPass").css("backgroundImage","url('UserFiles/Image/botones/ENVIAR-INGLES.png')");
    $("#DatosSeguridadDistri").css("backgroundImage","url('UserFiles/Image/botones/DatosSeguridadIng.png')");
    $("#DatosFacturacionDistri").css("backgroundImage","url('UserFiles/Image/botones/DatosFacturacionIng.png')");
    $("#DatosEntregaDistri").css("backgroundImage","url('UserFiles/Image/botones/DatosEntregaIng.png')");
    $("#IndicacionesDistri").css("backgroundImage","url('UserFiles/Image/botones/IndicadoresIng.png')");
    $("#DatosInteresDistri").css("backgroundImage","url('UserFiles/Image/botones/datosInteresIng.png')");
    $("#ctl00_ContentPlaceHolder1_ChangePassword1_ChangePasswordContainerID_ImageButton1").attr("src","UserFiles/Image/botones/CAMBIAR-CONTRASENA-ING.png");
    
}

function clickButton(e, buttonid){
    var evt = e ? e : window.event;
    var bt = document.getElementById(buttonid);
    if (bt)
    {
        if (evt.keyCode == 13)
        {
            bt.click();
            return false;
        }
    }
}

$(document).ready(function() 
{
    if ($("#idiom").val() == "2") {traducir();}
        else{$(".enviaDistri").attr("src","UserFiles/Image/botones/ENVIAR.png");}
    
    $("#todo").show();
    
    listas = $(".listaAJAX").length;
    $(".listaAJAX").each(function(i){ 
        getTablaAjax(this);
    });
    
	$("#subcabecera a").each(function(i){
		var href = $(this).attr("href");
		if (pname.indexOf(href.substring(0,8).toUpperCase()) != -1) {
			if (pname.indexOf("MPRESA") > 0){$(this).css("background-image", "url(img/overQuienes.gif)");}
			if (pname.indexOf("DUCTOS") > 0){$(this).css("background-image", "url(img/overProductos.jpg)");}
			if (pname.indexOf("TACTO") > 0){$(this).css("background-image", "url(img/overSolicitud.jpg)");}
			if (pname.indexOf("TICIAS") > 0){$(this).css("background-image", "url(img/overNoticias.jpg)");}
			if (pname.indexOf("TACTUS") > 0){$(this).css("background-image", "url(img/overContacto.jpg)");}
		}
	});
    
	$(".mnuCast").click(function(){
        var idioma = 1;
         $.ajax({
           type: "POST",
           url: "setidioma.aspx",
           data: "id=" + idioma,
           success: function(msg){
             //refrescar la pagina
             window.location.reload();
           }
         });
        return false;
    });
    $(".mnuIng").click(function(){
        var idioma = 2;
         $.ajax({
           type: "POST",
           url: "setidioma.aspx",
           data: "id=" + idioma,
           success: function(msg){
             //refrescar la pagina
             window.location.reload();
           }
         });
        return false;
    });

    
    if (esHome == 0) $("a[rel*=facebox]").facebox();
    
    
    $("#subDiv").hover(function(){
        $(this).show();
    },function(){
        $(this).hide();
    });
    
    $(".Lhijax").each(function(i){
      this.href = "javascript:requHijax(" + this.id + ")";
    });

	$(".clicAnt").css({cursor: "pointer" });
    $(".clicAnt").click( function() { 
        $(".anteriores").slideDown("fast");
	    //$(".anteriores").animate({width:100, opacity: 'show'}, "slow");
	});

    $("#ctl00_ContentPlaceHolder1_DetalleHijos1_DataList1 > tbody > tr > td").each(function(i){
              $("#rowUnica").append(this.innerHTML);
        });
    $("#ctl00_ContentPlaceHolder1_DetalleHijos1_DataList1").remove();

    $("#ctl00_ContentPlaceHolder1_Busqueda1_GridView1 tr td .repBus").each(function(i){
//              if ($(this).attr("colspan") != "1") $("#rowUnicaB").append(this.innerHTML);
              $("#rowUnicaB").append($(this).parent().html()); 
        });
    $("#cajaPag").append($("#ctl00_ContentPlaceHolder1_Busqueda1_GridView1").find("table").parent().html() )
    $("#ctl00_ContentPlaceHolder1_Busqueda1_GridView1").remove();


    if (listas == 0) parseTablaAjax();

        if ($(document).width() > 1550) 
        {
//            $("#Col3").addClass("Col3");
            //$(".bodyHome").css("background-image", "url(img/backhome2.gif)");
            //$(".bodyHome").css("background-position", "203px 10px");
            
            //if( jQuery.browser.msie && (jQuery.browser.version >= 7) ) $("#Col3").css("top", "80px");
            //$("#divCart").addClass("relDivN");
            //$("#banner").addClass("relDivM");
//            $("#ctl00_Relacionados1_relDiv").addClass("relDivL");
            //$(".relDiv").corner("bl tl 15px");
            //$(".relDivx").corner("tl 15px");
            //$(".relDivN").corner("tr br 15px");
            //$(".relDivM").corner("tr br 15px");
        }
        else
        {
//            $("#Col3").addClass("Col3b");
            //if( jQuery.browser.msie && (jQuery.browser.version >= 7) ) $("#Col3").css("top", "80px");
            //$("#divCart").addClass("relDivN");
            //$("#banner").addClass("relDivM");
//            $("#ctl00_Relacionados1_relDiv").addClass("relDivL");

//            $("#detalleHijos").css("width", "683px");
//            $("#detalleHijos").css("margin-left", "148px");
//            $(".repFinal").css("width", "620px");
//            $(".repFinal").css("margin-left", "10px");
//            $(".spanB").css("width", "210px");
//            $(".spanB a").addClass("txt10");//.css("fontSize", "10px !important");
//            $(".bodyHome a").addClass("txt10");//.css("fontSize", "10px !important");
//            $(".catHome a").addClass("txt10");
//            $(".catHome").css("width", "155px");


//            $("#subcabecera a").addClass("txt12");
            
//            $(".subCabProd a").addClass("txt10");
//            $("#pathDiv a").addClass("txt10");
            //$(".spanB").css("width", "200px");
//            $(".spanB").css("height", "200px");
//            $(".spanHome").css("height", "0px");
//            $(".spanB .imgFinal").css("height", "160px");
//            $(".spanB .titFinal").css("height", "30px");
//            $(".spanB .titFinal").css("width", "208px");
//            $(".bodyHome").css("background-image", "url(img/backhome2.gif)");
//            $(".bodyHome").css("background-position", "224px 10px");
//            $("#cabecera").css("background-position", "-70px 0px");
//            $(".lstHome tr").css("height", "55px");
//            $("#subcabecera").css("margin-left", "305px");
        }

    
    $("#ctl00_ContentPlaceHolder1_LoginView1_radioPortes_0").click( function() { 
	    $("#ctl00_ContentPlaceHolder1_LoginView1_radioFpago_0").parent().show(); 
	    $("#ctl00_ContentPlaceHolder1_LoginView1_radioFpago_1").parent().show(); 
	    setEnvio(0);
	});

    $("#ctl00_ContentPlaceHolder1_LoginView1_radioPortes_1").click( function() { 
	    $("#ctl00_ContentPlaceHolder1_LoginView1_radioFpago_0").parent().show(); 
	    $("#ctl00_ContentPlaceHolder1_LoginView1_radioFpago_1").parent().show(); 
	    setEnvio(1);
	});

    $("#ctl00_ContentPlaceHolder1_LoginView1_radioPortes_2").click( function() { 
	    $("#ctl00_ContentPlaceHolder1_LoginView1_radioFpago_0").parent().hide(); 
	    $("#ctl00_ContentPlaceHolder1_LoginView1_radioFpago_1").parent().hide(); 
	    $("#ctl00_ContentPlaceHolder1_LoginView1_radioFpago_2").attr("checked", true);
	    alert($("#ctl00_ContentPlaceHolder1_hAviso").val());	    
	    setEnvio(2);
	});

    $("#ctl00_ContentPlaceHolder1_LoginView1_radioPortes_3").click( function() { 
	    $("#ctl00_ContentPlaceHolder1_LoginView1_radioFpago_0").parent().show(); 
	    $("#ctl00_ContentPlaceHolder1_LoginView1_radioFpago_1").parent().hide(); 
	    $("#ctl00_ContentPlaceHolder1_LoginView1_radioFpago_2").attr("checked", true);
	    setEnvio(3);
	});

    
    
    
    //$("#divCart").corner("bl tl 20px");
	$(".cajaRound").corner("top 20px");
	//$("#menuHijos").corner("br 15px");
	
    $(".wrap2").corner("10px");
    $(".conte").corner("7px");
    $(".spanHome h3").corner("top 10px");
	//$("#ctl00_ContentPlaceHolder1_Login1").corner("top 20px");
	//$("#ctl00_ContentPlaceHolder1_CreateUserWizard1").corner("top 20px");
    
    //$("#Col3").corner("bl 30px");
    // intentar colocar el footer abajo:
    //var offset = $("body").offset();
    //alert(offset.top);
    
    $(".irCart").click(function() {
        if ($(this).hasClass("closeface") == false) location.href = "detalleCart.aspx";
    });
    
    $("#logo").click( function() { 
	    location.href = "/"; 
	});
	$("#logo").css({cursor: "pointer" });
    
    $(".txtLog").keypress(function(event)
    {   
        if ( event.keyCode == 13 )
        {   
             $("#ctl00_LoginView2_Login1_LoginButton").click();
             return false;
        }
    });
    
    $(".lstHome").each(function()
    {
        var idp = $(this).parent().attr("id").replace("lista","");
        var href = $(this).find("a").attr("href");
    	
        $(this).find("a").attr("href", href + "&idpadre=" + idp);
    });    
    
    //$(window).resize( function() { $("#pie").css("top", $(document).height()); } );

    $("#ctl00_ContentPlaceHolder2_Image1").fadeTo("fast", 0.8);

    $(".msgAlert").each(function()
    {   
        if ($(this).text() != "") alert($(this).text());
    });
        
    $("#btnVerDivBus").toggle(function(){
       $("#divBusq").fadeIn("slow");
    },function(){
       $("#divBusq").fadeOut("slow");
    });
    
    if ($("#rowUnicaB").children().length > 0) $("#divBusq").fadeOut("slow");
    
    // cargar la direccion de correo por js
    var dr = "cial@manu";
    $("#mailjs").html("<a href='mailto:comer" + dr + "facturasmedrano.com'><span>comer" + dr + "facturasmedrano.com</span></a>");
    //$("body").fadeIn(200);
    
    //$("#pie").css("top", $(document).height());
//    $("#pie").css("clear", "both");
    //$("#pie").appendTo("#todo");
    $("#pie").show();
    
    
    
    window.ValidationSummaryOnSubmit = function(validationGroup) {
         if (typeof(Page_ValidationSummaries) == "undefined") return;
         var summary, sums, s;
         for (sums = 0; sums < Page_ValidationSummaries.length; sums++) {
         summary = Page_ValidationSummaries[sums];
         summary.style.display = "none";
         if (!Page_IsValid && IsValidationGroupMatch(summary, validationGroup)) {
         var i;
         if (summary.showsummary != "False") {
             summary.style.display = "";
             if (typeof(summary.displaymode) != "string") {summary.displaymode = "BulletList";}
             switch (summary.displaymode) {
                 case "List":
                     headerSep = "<br>";
                     first = "";
                     pre = "";
                     post = "<br>";
                     end = "";
                 break;
                 case "BulletList":
                 default:
                     headerSep = "";
                     first = "<ul>";
                     pre = "<li>";
                     post = "</li>";
                     end = "</ul>";
                     break;
                 case "SingleParagraph":
                     headerSep = " ";
                     first = "";
                     pre = "";
                     post = " ";
                     end = "<br>";
                 break;
             }
             s = "";
             if (typeof(summary.headertext) == "string") { s += summary.headertext + headerSep;}
             s += first;
             for (i=0; i<Page_Validators.length; i++) {
                 if (!Page_Validators[i].isvalid && typeof(Page_Validators[i].errormessage) == "string") {
                     s += pre + Page_Validators[i].errormessage + post;
                 }
             }
             s += end;
             summary.innerHTML = s;
             window.scrollTo(0,0);
         }
         if (summary.showmessagebox == "True") {
         s = "";
         if (typeof(summary.headertext) == "string") { s += summary.headertext + "\r\n"; }
         var lastValIndex = Page_Validators.length - 1;
         for (i=0; i<=lastValIndex; i++) {
         if (!Page_Validators[i].isvalid && typeof(Page_Validators[i].errormessage) == "string") {
         switch (summary.displaymode) {
         case "List":
         s += Page_Validators[i].errormessage;
         if (i < lastValIndex) {
         s += "\r\n";
         }
         break;
         case "BulletList":
         default:
         s += "- " + Page_Validators[i].errormessage;
         if (i < lastValIndex) {
         s += "\r\n";
         }
         break;
         case "SingleParagraph":
         s += Page_Validators[i].errormessage + " ";
         break;
         }
         }
         }
         if (s.length > 5) alert("Por favor, rellene los campos obligatorios que faltan.");
         }
         }
         }
    };    
    
    
});




/*
JSONstring v 1.01
copyright 2006 Thomas Frank
(small sanitizer added to the toObject-method, May 2008)

This EULA grants you the following rights:

Installation and Use. You may install and use an unlimited number of copies of the SOFTWARE PRODUCT.

Reproduction and Distribution. You may reproduce and distribute an unlimited number of copies of the SOFTWARE PRODUCT either in whole or in part; each copy should include all copyright and trademark notices, and shall be accompanied by a copy of this EULA. Copies of the SOFTWARE PRODUCT may be distributed as a standalone product or included with your own product.

Commercial Use. You may sell for profit and freely distribute scripts and/or compiled scripts that were created with the SOFTWARE PRODUCT.

Based on Steve Yen's implementation:
http://trimpath.com/project/wiki/JsonLibrary

Sanitizer regExp:
Andrea Giammarchi 2007

*/

JSONstring={
	compactOutput:false, 		
	includeProtos:false, 	
	includeFunctions: false,
	detectCirculars:true,
	restoreCirculars:true,
	make:function(arg,restore) {
		this.restore=restore;
		this.mem=[];this.pathMem=[];
		return this.toJsonStringArray(arg).join('');
	},
	toObject:function(x){
		if(!this.cleaner){
			try{this.cleaner=new RegExp('^("(\\\\.|[^"\\\\\\n\\r])*?"|[,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t])+?$')}
			catch(a){this.cleaner=/^(true|false|null|\[.*\]|\{.*\}|".*"|\d+|\d+\.\d+)$/}
		};
		if(!this.cleaner.test(x)){return {}};
		eval("this.myObj="+x);
		if(!this.restoreCirculars || !alert){return this.myObj};
		if(this.includeFunctions){
			var x=this.myObj;
			for(var i in x){if(typeof x[i]=="string" && !x[i].indexOf("JSONincludedFunc:")){
				x[i]=x[i].substring(17);
				eval("x[i]="+x[i])
			}}
		};
		this.restoreCode=[];
		this.make(this.myObj,true);
		var r=this.restoreCode.join(";")+";";
		eval('r=r.replace(/\\W([0-9]{1,})(\\W)/g,"[$1]$2").replace(/\\.\\;/g,";")');
		eval(r);
		return this.myObj
	},
	toJsonStringArray:function(arg, out) {
		if(!out){this.path=[]};
		out = out || [];
		var u; // undefined
		switch (typeof arg) {
		case 'object':
			this.lastObj=arg;
			if(this.detectCirculars){
				var m=this.mem; var n=this.pathMem;
				for(var i=0;i<m.length;i++){
					if(arg===m[i]){
						out.push('"JSONcircRef:'+n[i]+'"');return out
					}
				};
				m.push(arg); n.push(this.path.join("."));
			};
			if (arg) {
				if (arg.constructor == Array) {
					out.push('[');
					for (var i = 0; i < arg.length; ++i) {
						this.path.push(i);
						if (i > 0)
							out.push(',\n');
						this.toJsonStringArray(arg[i], out);
						this.path.pop();
					}
					out.push(']');
					return out;
				} else if (typeof arg.toString != 'undefined') {
					out.push('{');
					var first = true;
					for (var i in arg) {
						if(!this.includeProtos && arg[i]===arg.constructor.prototype[i]){continue};
						this.path.push(i);
						var curr = out.length; 
						if (!first)
							out.push(this.compactOutput?',':',\n');
						this.toJsonStringArray(i, out);
						out.push(':');                    
						this.toJsonStringArray(arg[i], out);
						if (out[out.length - 1] == u)
							out.splice(curr, out.length - curr);
						else
							first = false;
						this.path.pop();
					}
					out.push('}');
					return out;
				}
				return out;
			}
			out.push('null');
			return out;
		case 'unknown':
		case 'undefined':
		case 'function':
			if(!this.includeFunctions){out.push(u);return out};
			arg="JSONincludedFunc:"+arg;
			out.push('"');
			var a=['\n','\\n','\r','\\r','"','\\"'];
			arg+=""; for(var i=0;i<6;i+=2){arg=arg.split(a[i]).join(a[i+1])};
			out.push(arg);
			out.push('"');
			return out;
		case 'string':
			if(this.restore && arg.indexOf("JSONcircRef:")==0){
				this.restoreCode.push('this.myObj.'+this.path.join(".")+"="+arg.split("JSONcircRef:").join("this.myObj."));
			};
			out.push('"');
			var a=['\n','\\n','\r','\\r','"','\\"'];
			arg+=""; for(var i=0;i<6;i+=2){arg=arg.split(a[i]).join(a[i+1])};
			out.push(arg);
			out.push('"');
			return out;
		default:
			out.push(String(arg));
			return out;
		}
	}
};
