commit df00e41104228f4543e97beaaf64a441e517a3db Author: Cecilia Piaggio Date: Mon Jun 23 15:28:32 2025 -0300 1er commit prueba 1 con gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4909293 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +# Archivos de compilación +bin/ +obj/ + +# Archivos de usuario de Visual Studio +*.user +*.suo +*.userosscache +*.sln.docstates + +# Archivos de configuración local +*.local.json + +# Paquetes NuGet descargados +*.nupkg +*.snupkg +packages/ + +# Archivos de publicación +.publish/ + +# Archivos de Rider/Resharper +.idea/ +*.DotSettings.user + +# Archivos exclude +*.exclude \ No newline at end of file diff --git a/App_Code/CSCode/ExtendedHtmlUtility.cs b/App_Code/CSCode/ExtendedHtmlUtility.cs new file mode 100644 index 0000000..ab114f7 --- /dev/null +++ b/App_Code/CSCode/ExtendedHtmlUtility.cs @@ -0,0 +1,531 @@ +using System; +using System.Collections.Specialized; +using System.Text.RegularExpressions; +/* +* (c) Craig Dunn - ConceptDevelopment.NET +* 12-June-04 +* +* To use: +* string encoded = ExtendedHtmlUtility.HtmlEntityEncode ("test string with Unicode chars and & < > é"); +* string decoded = ExtendedHtmlUtility.HtmlEntityDecode (encoded); // "string with & < > é" +* +* More info: +* http://users.bigpond.com/conceptdevelopment/localization/htmlencode/ +*/ +public class ExtendedHtmlUtility +{ + /// + /// Based on the 'reflected' code (from the Framework System.Web.HttpServerUtility) + /// listed on this page + /// UrlEncode vs. HtmlEncode + /// http://www.aspnetresources.com/blog/encoding_forms.aspx + /// + /// PDF of unicode characters in the 0-127 (dec) range + /// http://www.unicode.org/charts/PDF/U0000.pdf + /// + /// Unicode text + /// + /// & becomes &amp; (encoded for XML Comments - don't be confused) + /// 0-9a-zA-Z and some punctuation (ASCII, basically) remain unchanged + /// + public static string HtmlEntityEncode(string unicodeText) + { + return HtmlEntityEncode(unicodeText, true); + } + + /// + /// + /// + /// whether to encode & < and > which will + /// cause the entire string to be 'displayable' as HTML. true is the default value. + /// Setting this to false will result in a string where the non-ASCII characters + /// are encoded, but HTML tags remain in-tact for display in a browser. + /// + /// 0-9a-zA-Z and some punctuation (ASCII, basically) remain unchanged, + /// everything else encoded + /// + public static string HtmlEntityEncode(string unicodeText, bool encodeTagsToo) + { + int unicodeVal; + string encoded = String.Empty; // StringBuilder would be better - but this is simpler + foreach (char c in unicodeText) + { + unicodeVal = c; + switch (unicodeVal) + { + // comentarios en lo que sigue + //case '&': + // if (encodeTagsToo) encoded += "&"; + // break; + //case '<': + // if (encodeTagsToo) encoded += "<"; + // break; + //case '>': + // if (encodeTagsToo) encoded += ">"; + // break; + default: + //anterior al 12/07/2013, ver abajo lo nuevo + ////////if ((c >= 0x0001) && (c <= 0x007E)) // (c >= ' '), lo cambié por 0x0001 + //////// // el cambio fue porque viene, p. ej.: chr(10) como separador y debe conservarse + ////////{ // from 'space' to '~tilde' hex 20-7E (dec 32-127) + //////// // in 'ascii' range x30 to x7a which is 0-9A-Za-z plus some punctuation + //////// encoded += c; // leave as-is + ////////} + ////////else + ////////{ // outside 'ascii' range - encode + //////// if (c != 0xA0) + //////// { + //////// encoded += string.Concat("&#" + //////// , unicodeVal.ToString(System.Globalization.NumberFormatInfo.InvariantInfo) + //////// , ";"); + //////// } + ////////} + + // nueva versión, a partir de lo visto en RSS (12/07/2013): + if (((c >= 0x0020) && (c <= 0x007E)) || c == 0x000A || c == 0x000D) // (c >= ' '), lo cambié por 0x0001 en página + + // el cambio fue porque viene, p. ej.: chr(10) como separador y debe conservarse + { // from 'space' to '~tilde' hex 20-7E (dec 32-127) + // in 'ascii' range x30 to x7a which is 0-9A-Za-z plus some punctuation + encoded += c; // leave as-is + } + else + { // outside 'ascii' range - encode + if ((c != 0xA0) && (c > 0x007E)) //los caracteres menores de 20 Hexadecimal no los procesa (ver el IF de arriba) + { + encoded += string.Concat("&#" + , unicodeVal.ToString(System.Globalization.NumberFormatInfo.InvariantInfo) + , ";"); + } + } + + break; + } // switch + } // for each + return encoded; + } // HtmlEntityEncode + + /// + /// Converts Html Entities back to their 'underlying' Unicode characters + /// + /// Text containing Html Entities eg. &#1234; or &eacute; + /// + /// &amp; becomes & (encoded for XML Comments - don't be confused) + /// 1-9a-zA-Z and some punctuation (ASCII, basically) remain unchanged + /// + public static string HtmlEntityDecode(string encodedText) + { + return entityResolver.Replace(encodedText, new MatchEvaluator(ResolveEntityAngleAmp)); + } // HtmlEntityDecode + + + /// + /// Converts Html Entities back to their 'underlying' Unicode characters + /// + /// Text containing Html Entities eg. &#1234; or &eacute; + /// Include angles and ampersand < > & + /// + /// &amp; becomes & (encoded for XML Comments - don't be confused) + /// 1-9a-zA-Z and some punctuation (ASCII, basically) remain unchanged + /// + public static string HtmlEntityDecode(string encodedText, bool encodeTagsToo) + { + if (encodeTagsToo) + return entityResolver.Replace(encodedText, new MatchEvaluator(ResolveEntityAngleAmp)); + else + return entityResolver.Replace(encodedText, new MatchEvaluator(ResolveEntityNotAngleAmp)); + } // HtmlEntityDecode + + + /// + /// Static Regular Expression to match Html Entities in encoded text + /// Looking for named-entity, decimal or hexadecimal formats + /// http://www.w3.org/TR/REC-html40/charset.html#h-5.3.1 + /// http://www.i18nguy.com/markup/ncrs.html + /// http://www.vigay.com/inet/acorn/browse-html2.html#entities + /// + private static Regex entityResolver = + new Regex( + @"([&][#](?'decimal'[0-9]+);)|([&][#][(x|X)](?'hex'[0-9a-fA-F]+);)|([&](?'html'\w+);)" + ); + + /// + /// Regex Match processing delegate to replace the Entities with their + /// underlying Unicode character. + /// + /// Regular Expression Match eg. [ { |  | é ] + /// + /// &amp; becomes & (encoded for XML Comments - don't be confused) + /// and &eacute; becomes é + /// BUT we dont modify the angles or ampersand + /// + private static string ResolveEntityNotAngleAmp(System.Text.RegularExpressions.Match matchToProcess) + { + string x = ""; // default 'char placeholder' if cannot be resolved - shouldn't occur + if (matchToProcess.Groups["decimal"].Success) + { + x = Convert.ToChar(Convert.ToInt32(matchToProcess.Groups["decimal"].Value)).ToString(); + } + else if (matchToProcess.Groups["hex"].Success) + { + x = Convert.ToChar(HexToInt(matchToProcess.Groups["hex"].Value)).ToString(); + } + else if (matchToProcess.Groups["html"].Success) + { + string entity = matchToProcess.Groups["html"].Value; + switch (entity.ToLower()) + { + case "lt": + case "gt": + case "amp": + x = "&" + entity + ";"; + break; + default: + x = EntityLookup(entity); + break; + } + } + else x = "X"; + return x; + } // ResolveEntityNotAngleAmp() + + /// + /// Regex Match processing delegate to replace the Entities with their + /// underlying Unicode character. + /// + /// Regular Expression Match eg. [ { |  | é ] + /// + /// &amp; becomes & (encoded for XML Comments - don't be confused) + /// and &eacute; becomes é + /// + private static string ResolveEntityAngleAmp(System.Text.RegularExpressions.Match matchToProcess) + { + string x = ""; // default 'char placeholder' if cannot be resolved - shouldn't occur + if (matchToProcess.Groups["decimal"].Success) + { + x = Convert.ToChar(Convert.ToInt32(matchToProcess.Groups["decimal"].Value)).ToString(); + } + else if (matchToProcess.Groups["hex"].Success) + { + x = Convert.ToChar(HexToInt(matchToProcess.Groups["hex"].Value)).ToString(); + } + else if (matchToProcess.Groups["html"].Success) + { + x = EntityLookup(matchToProcess.Groups["html"].Value); + } + else x = "Y"; + return x; + } // ResolveEntityAngleAmp() + + + + /// + /// For the 'hexadecimal' format &#x233; we need to be able + /// to convert hex into decimal... + /// Thanks for this method to + /// http://www.c-sharpcorner.com/Code/2002/Sept/HexColors.asp + /// + /// + /// This method converts a hexvalues string as 80FF into a integer. + /// Note that you may NOT put a '#' at the beginning of string! There + /// is not much error checking in this method. If the string does not + /// represent a valid hexadecimal value it returns 0. + /// + /// eg 00, 1A, ff, etc + /// eg. 0, 26, 255 (zero if the inputstring is NOT a valid hexadecimal) + public static int HexToInt(String hexstr) + { + int counter, hexint; + char[] hexarr; + hexint = 0; + hexstr = hexstr.ToUpper(); + hexarr = hexstr.ToCharArray(); + for (counter = hexarr.Length - 1; counter >= 0; counter--) + { + if ((hexarr[counter] >= '0') && (hexarr[counter] <= '9')) + { + hexint += (hexarr[counter] - 48) * ((int)(Math.Pow(16, hexarr.Length - 1 - counter))); + } + else + { + if ((hexarr[counter] >= 'A') && (hexarr[counter] <= 'F')) + { + hexint += (hexarr[counter] - 55) * ((int)(Math.Pow(16, hexarr.Length - 1 - counter))); + } + else + { + hexint = 0; + break; + } + } + } + return hexint; + } //HexToInt + + + + /// + /// Thanks to this site for the Entity Reference + /// http://www.vigay.com/inet/acorn/browse-html2.html#entities + /// + private static string EntityLookup(string entity) + { + string x = ""; + switch (entity) + { + case "Aacute": x = Convert.ToChar(0x00C1).ToString(); break; + case "aacute": x = Convert.ToChar(0x00E1).ToString(); break; + case "acirc": x = Convert.ToChar(0x00E2).ToString(); break; + case "Acirc": x = Convert.ToChar(0x00C2).ToString(); break; + case "acute": x = Convert.ToChar(0x00B4).ToString(); break; + case "AElig": x = Convert.ToChar(0x00C6).ToString(); break; + case "aelig": x = Convert.ToChar(0x00E6).ToString(); break; + case "Agrave": x = Convert.ToChar(0x00C0).ToString(); break; + case "agrave": x = Convert.ToChar(0x00E0).ToString(); break; + case "alefsym": x = Convert.ToChar(0x2135).ToString(); break; + case "Alpha": x = Convert.ToChar(0x0391).ToString(); break; + case "alpha": x = Convert.ToChar(0x03B1).ToString(); break; + case "amp": x = Convert.ToChar(0x0026).ToString(); break; + case "and": x = Convert.ToChar(0x2227).ToString(); break; + case "ang": x = Convert.ToChar(0x2220).ToString(); break; + case "aring": x = Convert.ToChar(0x00E5).ToString(); break; + case "Aring": x = Convert.ToChar(0x00C5).ToString(); break; + case "asymp": x = Convert.ToChar(0x2248).ToString(); break; + case "Atilde": x = Convert.ToChar(0x00C3).ToString(); break; + case "atilde": x = Convert.ToChar(0x00E3).ToString(); break; + case "auml": x = Convert.ToChar(0x00E4).ToString(); break; + case "Auml": x = Convert.ToChar(0x00C4).ToString(); break; + case "bdquo": x = Convert.ToChar(0x201E).ToString(); break; + case "Beta": x = Convert.ToChar(0x0392).ToString(); break; + case "beta": x = Convert.ToChar(0x03B2).ToString(); break; + case "brvbar": x = Convert.ToChar(0x00A6).ToString(); break; + case "bull": x = Convert.ToChar(0x2022).ToString(); break; + case "cap": x = Convert.ToChar(0x2229).ToString(); break; + case "Ccedil": x = Convert.ToChar(0x00C7).ToString(); break; + case "ccedil": x = Convert.ToChar(0x00E7).ToString(); break; + case "cedil": x = Convert.ToChar(0x00B8).ToString(); break; + case "cent": x = Convert.ToChar(0x00A2).ToString(); break; + case "chi": x = Convert.ToChar(0x03C7).ToString(); break; + case "Chi": x = Convert.ToChar(0x03A7).ToString(); break; + case "circ": x = Convert.ToChar(0x02C6).ToString(); break; + case "clubs": x = Convert.ToChar(0x2663).ToString(); break; + case "cong": x = Convert.ToChar(0x2245).ToString(); break; + case "copy": x = Convert.ToChar(0x00A9).ToString(); break; + case "crarr": x = Convert.ToChar(0x21B5).ToString(); break; + case "cup": x = Convert.ToChar(0x222A).ToString(); break; + case "curren": x = Convert.ToChar(0x00A4).ToString(); break; + case "dagger": x = Convert.ToChar(0x2020).ToString(); break; + case "Dagger": x = Convert.ToChar(0x2021).ToString(); break; + case "darr": x = Convert.ToChar(0x2193).ToString(); break; + case "dArr": x = Convert.ToChar(0x21D3).ToString(); break; + case "deg": x = Convert.ToChar(0x00B0).ToString(); break; + case "Delta": x = Convert.ToChar(0x0394).ToString(); break; + case "delta": x = Convert.ToChar(0x03B4).ToString(); break; + case "diams": x = Convert.ToChar(0x2666).ToString(); break; + case "divide": x = Convert.ToChar(0x00F7).ToString(); break; + case "eacute": x = Convert.ToChar(0x00E9).ToString(); break; + case "Eacute": x = Convert.ToChar(0x00C9).ToString(); break; + case "Ecirc": x = Convert.ToChar(0x00CA).ToString(); break; + case "ecirc": x = Convert.ToChar(0x00EA).ToString(); break; + case "Egrave": x = Convert.ToChar(0x00C8).ToString(); break; + case "egrave": x = Convert.ToChar(0x00E8).ToString(); break; + case "empty": x = Convert.ToChar(0x2205).ToString(); break; + case "emsp": x = Convert.ToChar(0x2003).ToString(); break; + case "ensp": x = Convert.ToChar(0x2002).ToString(); break; + case "epsilon": x = Convert.ToChar(0x03B5).ToString(); break; + case "Epsilon": x = Convert.ToChar(0x0395).ToString(); break; + case "equiv": x = Convert.ToChar(0x2261).ToString(); break; + case "Eta": x = Convert.ToChar(0x0397).ToString(); break; + case "eta": x = Convert.ToChar(0x03B7).ToString(); break; + case "eth": x = Convert.ToChar(0x00F0).ToString(); break; + case "ETH": x = Convert.ToChar(0x00D0).ToString(); break; + case "Euml": x = Convert.ToChar(0x00CB).ToString(); break; + case "euml": x = Convert.ToChar(0x00EB).ToString(); break; + case "euro": x = Convert.ToChar(0x20AC).ToString(); break; + case "exist": x = Convert.ToChar(0x2203).ToString(); break; + case "fnof": x = Convert.ToChar(0x0192).ToString(); break; + case "forall": x = Convert.ToChar(0x2200).ToString(); break; + case "frac12": x = Convert.ToChar(0x00BD).ToString(); break; + case "frac14": x = Convert.ToChar(0x00BC).ToString(); break; + case "frac34": x = Convert.ToChar(0x00BE).ToString(); break; + case "frasl": x = Convert.ToChar(0x2044).ToString(); break; + case "gamma": x = Convert.ToChar(0x03B3).ToString(); break; + case "Gamma": x = Convert.ToChar(0x393).ToString(); break; + case "ge": x = Convert.ToChar(0x2265).ToString(); break; + case "gt": x = Convert.ToChar(0x003E).ToString(); break; + case "hArr": x = Convert.ToChar(0x21D4).ToString(); break; + case "harr": x = Convert.ToChar(0x2194).ToString(); break; + case "hearts": x = Convert.ToChar(0x2665).ToString(); break; + case "hellip": x = Convert.ToChar(0x2026).ToString(); break; + case "Iacute": x = Convert.ToChar(0x00CD).ToString(); break; + case "iacute": x = Convert.ToChar(0x00ED).ToString(); break; + case "icirc": x = Convert.ToChar(0x00EE).ToString(); break; + case "Icirc": x = Convert.ToChar(0x00CE).ToString(); break; + case "iexcl": x = Convert.ToChar(0x00A1).ToString(); break; + case "Igrave": x = Convert.ToChar(0x00CC).ToString(); break; + case "igrave": x = Convert.ToChar(0x00EC).ToString(); break; + case "image": x = Convert.ToChar(0x2111).ToString(); break; + case "infin": x = Convert.ToChar(0x221E).ToString(); break; + case "int": x = Convert.ToChar(0x222B).ToString(); break; + case "Iota": x = Convert.ToChar(0x0399).ToString(); break; + case "iota": x = Convert.ToChar(0x03B9).ToString(); break; + case "iquest": x = Convert.ToChar(0x00BF).ToString(); break; + case "isin": x = Convert.ToChar(0x2208).ToString(); break; + case "iuml": x = Convert.ToChar(0x00EF).ToString(); break; + case "Iuml": x = Convert.ToChar(0x00CF).ToString(); break; + case "kappa": x = Convert.ToChar(0x03BA).ToString(); break; + case "Kappa": x = Convert.ToChar(0x039A).ToString(); break; + case "Lambda": x = Convert.ToChar(0x039B).ToString(); break; + case "lambda": x = Convert.ToChar(0x03BB).ToString(); break; + case "lang": x = Convert.ToChar(0x2329).ToString(); break; + case "laquo": x = Convert.ToChar(0x00AB).ToString(); break; + case "larr": x = Convert.ToChar(0x2190).ToString(); break; + case "lArr": x = Convert.ToChar(0x21D0).ToString(); break; + case "lceil": x = Convert.ToChar(0x2308).ToString(); break; + case "ldquo": x = Convert.ToChar(0x201C).ToString(); break; + case "le": x = Convert.ToChar(0x2264).ToString(); break; + case "lfloor": x = Convert.ToChar(0x230A).ToString(); break; + case "lowast": x = Convert.ToChar(0x2217).ToString(); break; + case "loz": x = Convert.ToChar(0x25CA).ToString(); break; + case "lrm": x = Convert.ToChar(0x200E).ToString(); break; + case "lsaquo": x = Convert.ToChar(0x2039).ToString(); break; + case "lsquo": x = Convert.ToChar(0x2018).ToString(); break; + case "lt": x = Convert.ToChar(0x003C).ToString(); break; + case "macr": x = Convert.ToChar(0x00AF).ToString(); break; + case "mdash": x = Convert.ToChar(0x2014).ToString(); break; + case "micro": x = Convert.ToChar(0x00B5).ToString(); break; + case "middot": x = Convert.ToChar(0x00B7).ToString(); break; + case "minus": x = Convert.ToChar(0x2212).ToString(); break; + case "Mu": x = Convert.ToChar(0x039C).ToString(); break; + case "mu": x = Convert.ToChar(0x03BC).ToString(); break; + case "nabla": x = Convert.ToChar(0x2207).ToString(); break; + case "nbsp": x = Convert.ToChar(0x00A0).ToString(); break; + case "ndash": x = Convert.ToChar(0x2013).ToString(); break; + case "ne": x = Convert.ToChar(0x2260).ToString(); break; + case "ni": x = Convert.ToChar(0x220B).ToString(); break; + case "not": x = Convert.ToChar(0x00AC).ToString(); break; + case "notin": x = Convert.ToChar(0x2209).ToString(); break; + case "nsub": x = Convert.ToChar(0x2284).ToString(); break; + case "ntilde": x = Convert.ToChar(0x00F1).ToString(); break; + case "Ntilde": x = Convert.ToChar(0x00D1).ToString(); break; + case "Nu": x = Convert.ToChar(0x039D).ToString(); break; + case "nu": x = Convert.ToChar(0x03BD).ToString(); break; + case "oacute": x = Convert.ToChar(0x00F3).ToString(); break; + case "Oacute": x = Convert.ToChar(0x00D3).ToString(); break; + case "Ocirc": x = Convert.ToChar(0x00D4).ToString(); break; + case "ocirc": x = Convert.ToChar(0x00F4).ToString(); break; + case "OElig": x = Convert.ToChar(0x0152).ToString(); break; + case "oelig": x = Convert.ToChar(0x0153).ToString(); break; + case "ograve": x = Convert.ToChar(0x00F2).ToString(); break; + case "Ograve": x = Convert.ToChar(0x00D2).ToString(); break; + case "oline": x = Convert.ToChar(0x203E).ToString(); break; + case "Omega": x = Convert.ToChar(0x03A9).ToString(); break; + case "omega": x = Convert.ToChar(0x03C9).ToString(); break; + case "Omicron": x = Convert.ToChar(0x039F).ToString(); break; + case "omicron": x = Convert.ToChar(0x03BF).ToString(); break; + case "oplus": x = Convert.ToChar(0x2295).ToString(); break; + case "or": x = Convert.ToChar(0x2228).ToString(); break; + case "ordf": x = Convert.ToChar(0x00AA).ToString(); break; + case "ordm": x = Convert.ToChar(0x00BA).ToString(); break; + case "Oslash": x = Convert.ToChar(0x00D8).ToString(); break; + case "oslash": x = Convert.ToChar(0x00F8).ToString(); break; + case "otilde": x = Convert.ToChar(0x00F5).ToString(); break; + case "Otilde": x = Convert.ToChar(0x00D5).ToString(); break; + case "otimes": x = Convert.ToChar(0x2297).ToString(); break; + case "Ouml": x = Convert.ToChar(0x00D6).ToString(); break; + case "ouml": x = Convert.ToChar(0x00F6).ToString(); break; + case "para": x = Convert.ToChar(0x00B6).ToString(); break; + case "part": x = Convert.ToChar(0x2202).ToString(); break; + case "permil": x = Convert.ToChar(0x2030).ToString(); break; + case "perp": x = Convert.ToChar(0x22A5).ToString(); break; + case "Phi": x = Convert.ToChar(0x03A6).ToString(); break; + case "phi": x = Convert.ToChar(0x03C6).ToString(); break; + case "Pi": x = Convert.ToChar(0x03A0).ToString(); break; + case "pi": x = Convert.ToChar(0x03C0).ToString(); break; + case "piv": x = Convert.ToChar(0x03D6).ToString(); break; + case "plusmn": x = Convert.ToChar(0x00B1).ToString(); break; + case "pound": x = Convert.ToChar(0x00A3).ToString(); break; + case "Prime": x = Convert.ToChar(0x2033).ToString(); break; + case "prime": x = Convert.ToChar(0x2032).ToString(); break; + case "prod": x = Convert.ToChar(0x220F).ToString(); break; + case "prop": x = Convert.ToChar(0x221D).ToString(); break; + case "psi": x = Convert.ToChar(0x03C8).ToString(); break; + case "Psi": x = Convert.ToChar(0x03A8).ToString(); break; + case "quot": x = Convert.ToChar(0x0022).ToString(); break; + case "radic": x = Convert.ToChar(0x221A).ToString(); break; + case "rang": x = Convert.ToChar(0x232A).ToString(); break; + case "raquo": x = Convert.ToChar(0x00BB).ToString(); break; + case "rarr": x = Convert.ToChar(0x2192).ToString(); break; + case "rArr": x = Convert.ToChar(0x21D2).ToString(); break; + case "rceil": x = Convert.ToChar(0x2309).ToString(); break; + case "rdquo": x = Convert.ToChar(0x201D).ToString(); break; + case "real": x = Convert.ToChar(0x211C).ToString(); break; + case "reg": x = Convert.ToChar(0x00AE).ToString(); break; + case "rfloor": x = Convert.ToChar(0x230B).ToString(); break; + case "rho": x = Convert.ToChar(0x03C1).ToString(); break; + case "Rho": x = Convert.ToChar(0x03A1).ToString(); break; + case "rlm": x = Convert.ToChar(0x200F).ToString(); break; + case "rsaquo": x = Convert.ToChar(0x203A).ToString(); break; + case "rsquo": x = Convert.ToChar(0x2019).ToString(); break; + case "sbquo": x = Convert.ToChar(0x201A).ToString(); break; + case "Scaron": x = Convert.ToChar(0x0160).ToString(); break; + case "scaron": x = Convert.ToChar(0x0161).ToString(); break; + case "sdot": x = Convert.ToChar(0x22C5).ToString(); break; + case "sect": x = Convert.ToChar(0x00A7).ToString(); break; + case "shy": x = Convert.ToChar(0x00AD).ToString(); break; + case "sigma": x = Convert.ToChar(0x03C3).ToString(); break; + case "Sigma": x = Convert.ToChar(0x03A3).ToString(); break; + case "sigmaf": x = Convert.ToChar(0x03C2).ToString(); break; + case "sim": x = Convert.ToChar(0x223C).ToString(); break; + case "spades": x = Convert.ToChar(0x2660).ToString(); break; + case "sub": x = Convert.ToChar(0x2282).ToString(); break; + case "sube": x = Convert.ToChar(0x2286).ToString(); break; + case "sum": x = Convert.ToChar(0x2211).ToString(); break; + case "sup": x = Convert.ToChar(0x2283).ToString(); break; + case "sup1": x = Convert.ToChar(0x00B9).ToString(); break; + case "sup2": x = Convert.ToChar(0x00B2).ToString(); break; + case "sup3": x = Convert.ToChar(0x00B3).ToString(); break; + case "supe": x = Convert.ToChar(0x2287).ToString(); break; + case "szlig": x = Convert.ToChar(0x00DF).ToString(); break; + case "Tau": x = Convert.ToChar(0x03A4).ToString(); break; + case "tau": x = Convert.ToChar(0x03C4).ToString(); break; + case "there4": x = Convert.ToChar(0x2234).ToString(); break; + case "theta": x = Convert.ToChar(0x03B8).ToString(); break; + case "Theta": x = Convert.ToChar(0x0398).ToString(); break; + case "thetasym": x = Convert.ToChar(0x03D1).ToString(); break; + case "thinsp": x = Convert.ToChar(0x2009).ToString(); break; + case "thorn": x = Convert.ToChar(0x00FE).ToString(); break; + case "THORN": x = Convert.ToChar(0x00DE).ToString(); break; + case "tilde": x = Convert.ToChar(0x02DC).ToString(); break; + case "times": x = Convert.ToChar(0x00D7).ToString(); break; + case "trade": x = Convert.ToChar(0x2122).ToString(); break; + case "Uacute": x = Convert.ToChar(0x00DA).ToString(); break; + case "uacute": x = Convert.ToChar(0x00FA).ToString(); break; + case "uarr": x = Convert.ToChar(0x2191).ToString(); break; + case "uArr": x = Convert.ToChar(0x21D1).ToString(); break; + case "Ucirc": x = Convert.ToChar(0x00DB).ToString(); break; + case "ucirc": x = Convert.ToChar(0x00FB).ToString(); break; + case "Ugrave": x = Convert.ToChar(0x00D9).ToString(); break; + case "ugrave": x = Convert.ToChar(0x00F9).ToString(); break; + case "uml": x = Convert.ToChar(0x00A8).ToString(); break; + case "upsih": x = Convert.ToChar(0x03D2).ToString(); break; + case "Upsilon": x = Convert.ToChar(0x03A5).ToString(); break; + case "upsilon": x = Convert.ToChar(0x03C5).ToString(); break; + case "Uuml": x = Convert.ToChar(0x00DC).ToString(); break; + case "uuml": x = Convert.ToChar(0x00FC).ToString(); break; + case "weierp": x = Convert.ToChar(0x2118).ToString(); break; + case "Xi": x = Convert.ToChar(0x039E).ToString(); break; + case "xi": x = Convert.ToChar(0x03BE).ToString(); break; + case "yacute": x = Convert.ToChar(0x00FD).ToString(); break; + case "Yacute": x = Convert.ToChar(0x00DD).ToString(); break; + case "yen": x = Convert.ToChar(0x00A5).ToString(); break; + case "Yuml": x = Convert.ToChar(0x0178).ToString(); break; + case "yuml": x = Convert.ToChar(0x00FF).ToString(); break; + case "zeta": x = Convert.ToChar(0x03B6).ToString(); break; + case "Zeta": x = Convert.ToChar(0x0396).ToString(); break; + case "zwj": x = Convert.ToChar(0x200D).ToString(); break; + case "zwnj": x = Convert.ToChar(0x200C).ToString(); break; + } + return x; + } // EntityLookup() +} // class ExtendedHtmlUtility diff --git a/App_Code/VBCode/Clasi3.vb b/App_Code/VBCode/Clasi3.vb new file mode 100644 index 0000000..1c96095 --- /dev/null +++ b/App_Code/VBCode/Clasi3.vb @@ -0,0 +1,70 @@ +Option Strict On + +Imports System +Imports System.Configuration +Imports System.Data +Imports System.Data.SqlClient +Imports System.Web + +Imports Microsoft.VisualBasic + +Public Class Clasi3 + + Public Shared Function GetTipoFunebres(ByVal id As Integer) As SqlDataReader + GetTipoFunebres = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clasi3") + + db.RunProcedure("sp_Fun_Tipos", New SqlParameter() {db.MakeParameter("@i", id)}, GetTipoFunebres) + + End Function + + Public Shared Function GetFunebres(ByVal f1 As String, ByVal f2 As String, ByVal id As Integer) As SqlDataReader + GetFunebres = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clasi3") + + db.RunProcedure("sp_Fun_nombres", _ + New SqlParameter() {db.MakeParameter("@f1", f1), db.MakeParameter("@f2", f2), _ + db.MakeParameter("@i", id)}, GetFunebres) + + End Function + + Public Shared Function CheckFunebres(ByVal f1 As String, ByVal f2 As String) As SqlDataReader + CheckFunebres = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clasi3") + db.RunProcedure("sp_Fun_Check", _ + New SqlParameter() {db.MakeParameter("@f1", f1), db.MakeParameter("@f2", f2)}, CheckFunebres) + End Function + + Public Shared Function GetDesplegado(ByVal f1 As String, ByVal f2 As String, ByVal id As Integer, _ + ByVal apellido As String, ByVal nombre As String) As SqlDataReader + GetDesplegado = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clasi3") + + db.RunProcedure("sp_Fun_Desplegado_nuevo", _ + New SqlParameter() {db.MakeParameter("@f1", f1), db.MakeParameter("@f2", f2), _ + db.MakeParameter("@i", id), db.MakeParameter("@apellido", apellido), _ + db.MakeParameter("@nombre", nombre)}, GetDesplegado) + Return GetDesplegado + End Function + + Public Shared Function CheckFunebresNuevo(ByVal fecha As String, ByVal int_tipo As Integer, ByVal int_diario As Integer, ByVal web As Boolean) As SqlDataReader + CheckFunebresNuevo = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clasi3") + db.RunProcedure("sp_funeavisos", _ + New SqlParameter() {db.MakeParameter("@fecha", fecha), db.MakeParameter("@int_tipo", int_tipo), db.MakeParameter("@int_diario", int_diario), db.MakeParameter("@web", web)}, CheckFunebresNuevo) + End Function + + Public Shared Function VerListado(ByVal fecha As String, ByVal int_tipo As Integer, ByVal int_diario As Integer) As SqlDataReader + VerListado = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clasi3") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_funelistado", New SqlParameter() {db.MakeParameter("@fecha", fecha), db.MakeParameter("@int_tipo", int_tipo), db.MakeParameter("@int_diario", int_diario)}, VerListado) + End Function + +End Class diff --git a/App_Code/VBCode/Database.vb b/App_Code/VBCode/Database.vb new file mode 100644 index 0000000..9238e46 --- /dev/null +++ b/App_Code/VBCode/Database.vb @@ -0,0 +1,362 @@ +Option Strict On + +Imports System +Imports System.Data +Imports System.Data.SqlClient +Imports System.Configuration + + + +Public Class Database + Implements IDisposable + +#Region "Private Fields" + 'connection to data source + Private con As SqlConnection + Private str_con As String = System.Configuration.ConfigurationManager.AppSettings("con_ed1") 'default + 'Error Message field + Private _errorMessage As String + 'latest exception + Private _exception As System.Exception +#End Region + +#Region "Public Properties" + + Public ReadOnly Property ErrorMessage() As String + Get + Return _errorMessage + End Get + End Property + + Public ReadOnly Property LastException() As System.Exception + Get + Return _exception + End Get + End Property + + Public Property ConString() As String + Get + Return str_con + End Get + Set(ByVal value As String) + str_con = value + End Set + End Property + + Public ReadOnly Property ConnectionString() As String + Get + 'Return System.Configuration.ConfigurationSettings.AppSettings("Database.DEFAULT_CONNECTION_STRING") + Return str_con ''System.Configuration.ConfigurationManager.AppSettings("conn") + End Get + End Property + +#End Region + +#Region "Public Method Implementations" + + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + 'This function takes a stored proc name and returns an integer ' + 'by invoking ExecuteScalar() on the SqlCommand type instance ' + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + Public Function RunProcedure(ByVal procName As String) As Integer + Dim result As Integer + Dim cmd As SqlCommand + Try + cmd = CreateCommand(procName, Nothing) + result = CType(cmd.ExecuteScalar(), Integer) + Catch e As Exception + result = -1 + _errorMessage = e.Message + _exception = e + Finally + Me.Close() + End Try + + Return result + + End Function + + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + 'This function takes a stored proc name, sql parameters returns an integer ' + 'by invoking ExecuteScalar() on the SqlCommand type instance ' + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + Public Function RunProcedure(ByVal procName As String, ByVal prams As SqlParameter()) As Integer + Dim result As Integer + Dim cmd As SqlCommand + + Try + + cmd = CreateCommand(procName, prams) + result = CInt(cmd.ExecuteScalar()) + + Catch e As Exception + result = -1 + _errorMessage = e.Message + _exception = e + + Finally + Me.Close() + + End Try + + Return result + + End Function + + Public Function RunProcstring(ByVal procName As String, ByVal prams As SqlParameter()) As String + Dim result As String + Dim cmd As SqlCommand + Try + cmd = CreateCommand(procName, prams) + result = CStr(cmd.ExecuteScalar()) + Catch e As Exception + result = "" + _errorMessage = e.Message + _exception = e + Finally + Me.Close() + End Try + Return result + End Function + + Public Function RunProcBool(ByVal procName As String, ByVal prams As SqlParameter()) As Boolean + Dim result As Boolean + Dim cmd As SqlCommand + Try + cmd = CreateCommand(procName, prams) + result = CBool(cmd.ExecuteScalar()) + Catch e As Exception + result = False + _errorMessage = e.Message + _exception = e + Finally + Me.Close() + End Try + Return result + End Function + + Public Function RunProcBool(ByVal procName As String) As Boolean + Dim result As Boolean + Dim cmd As SqlCommand + Try + cmd = CreateCommand(procName, Nothing) + result = CBool(cmd.ExecuteScalar()) + Catch e As Exception + result = False + _errorMessage = e.Message + _exception = e + Finally + Me.Close() + End Try + Return result + End Function + + + Public Function RunProcDate(ByVal procName As String, ByVal prams As SqlParameter()) As Date + Dim result As Date + Dim cmd As SqlCommand + + Try + + cmd = CreateCommand(procName, prams) + result = CDate(cmd.ExecuteScalar()) + + Catch e As Exception + result = CDate("1000/01/01") + _errorMessage = e.Message + _exception = e + + Finally + Me.Close() + + End Try + + Return result + + End Function + + ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + 'This method takes a stored proc name and a SqlDataReader (BY REF) and returns the results ' + 'in the same DataReader that you pass in as ref. This invokes ExecuteReader on SqlCommand type' + 'instance ' + ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + Public Sub RunProcedure(ByVal procName As String, ByRef dataReader As SqlDataReader) + Dim cmd As SqlCommand + Try + cmd = CreateCommand(procName, Nothing) + dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection) + + Catch e As Exception + dataReader = Nothing + _errorMessage = e.Message + _exception = e + Me.Close() + End Try + End Sub + + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + 'This method takes a stored proc name, Sql Parameters and a SqlDataReader (BY REF) and ' + 'returns the results in the same DataReader that you pass in as ref. This invokes ExecuteReader' + 'on SqlCommand type instance ' + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + Public Sub RunProcedure(ByVal procName As String, ByVal prams As SqlParameter(), ByRef dataReader As SqlDataReader) + Dim cmd As SqlCommand + ''Dim dr As SqlDataReader + Try + cmd = CreateCommand(procName, prams) + dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection) + + Catch e As Exception + dataReader = Nothing + _errorMessage = e.Message + _exception = e + Me.Close() + End Try + + End Sub + + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + 'This method takes a stored proc name, Sql Parameters and a DataSet ByRef ' + 'In case of an exception returns a Nothing and ErrorMessage ' + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + Public Sub RunProcedure(ByVal procName As String, ByVal prams As SqlParameter(), ByRef ds As DataSet) + Dim cmd As SqlCommand + Dim adapter As SqlDataAdapter + Try + cmd = CreateCommand(procName, prams) + adapter = New SqlDataAdapter(cmd) + adapter.Fill(ds) + Catch e As Exception + _errorMessage = e.Message + _exception = e + ds = Nothing + Finally + adapter = Nothing + Me.Close() + End Try + + End Sub + + + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + 'This method takes a stored proc name and a Dataset by Ref ' + 'In case of an exception returns a Nothing and ErrorMessage ' + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + Public Sub RunProcedure(ByVal procName As String, ByRef ds As DataSet) + + Dim cmd As SqlCommand + Dim adapter As SqlDataAdapter + + Try + cmd = CreateCommand(procName, Nothing) + adapter = New SqlDataAdapter(cmd) + adapter.Fill(ds) + Catch e As Exception + _errorMessage = e.Message + _exception = e + ds = Nothing + Finally + adapter = Nothing + Me.Close() + End Try + + End Sub + + Public Function MakeParameter(ByVal ParamName As String, ByVal Value As Object) As SqlParameter + Dim param As SqlParameter + + param = New SqlParameter(ParamName, Value) + + Return param + + End Function + + Public Function MakeParameter(ByVal ParamName As String, ByVal Direction As ParameterDirection, Optional ByVal Value As Object = Nothing) As SqlParameter + Dim param As SqlParameter + + param = New SqlParameter(ParamName, Value) + param.Direction = Direction + + Return param + + End Function + + Public Function MakeParameter(ByVal ParamName As String, ByVal DBType As SqlDbType, ByVal Size As Integer, ByVal Value As Object) As SqlParameter + Dim param As SqlParameter + + param = New SqlParameter(ParamName, DBType, Size) + param.Value = Value + + Return param + + End Function + + Public Sub Close() + If (con Is Nothing) Then + Else + con.Close() + End If + End Sub + + Public Sub Dispose() Implements IDisposable.Dispose + + If (con Is Nothing) Then + Else + con.Dispose() + con = Nothing + End If + 'Suppress the finalization process + System.GC.SuppressFinalize(Me) + + End Sub + +#End Region + +#Region "Private Method Implementations" + + Private Function CreateCommand(ByVal procName As String, ByVal prams As SqlParameter()) As SqlCommand + + Dim cmd As SqlCommand + Dim parameter As SqlParameter + + Call Open() + + cmd = New SqlCommand(procName, con) + + cmd.CommandType = CommandType.StoredProcedure + + If (prams Is Nothing) Then + Else + For Each parameter In prams + cmd.Parameters.Add(parameter) + Next + + End If + + Return cmd + + End Function + + + Private Sub Open() + If (con Is Nothing) Then + + con = New SqlConnection(str_con) + Try + con.Open() + Catch ex As Exception + _errorMessage = ex.Message + End Try + + Else + If ((con.State = ConnectionState.Closed) Or (con.State = ConnectionState.Broken)) Then + con.Open() + End If + End If + End Sub +#End Region + + +End Class + + diff --git a/App_Code/VBCode/Posts.vb b/App_Code/VBCode/Posts.vb new file mode 100644 index 0000000..4dc43e3 --- /dev/null +++ b/App_Code/VBCode/Posts.vb @@ -0,0 +1,22 @@ +Option Strict On + +Imports System +Imports System.Configuration +Imports System.Data +Imports System.Data.SqlClient + +Public Class Posts + Public Shared Function TituloBlog(ByVal blog As Integer) As String + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_blogs") + Return db.RunProcstring("sp_blogtitulo", New SqlParameter() {db.MakeParameter("@blog", blog)}) + End Function + + Public Shared Function Listado_posts() As SqlDataReader + Listado_posts = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_blogs") + db.RunProcedure("sp_listado_posts_extra", Listado_posts) + End Function + +End Class diff --git a/App_Code/VBCode/admin.vb b/App_Code/VBCode/admin.vb new file mode 100644 index 0000000..1433e89 --- /dev/null +++ b/App_Code/VBCode/admin.vb @@ -0,0 +1,30 @@ +Option Strict On + +Imports System +Imports System.Configuration +Imports System.Data +Imports System.Data.SqlClient +Imports System.Web + +Imports Microsoft.VisualBasic + +Public Class admin + + + Public Shared Function Grabarsesiones(ByVal generador As String, ByVal pagina As String, ByVal dirIP As String) As Integer + Dim db As New Database + Return db.RunProcedure("sp_grabarsesiones", New SqlParameter() {db.MakeParameter("@generador", generador), db.MakeParameter("@pagina", pagina), db.MakeParameter("@dirIP", dirIP)}) + End Function + + Public Shared Function Errores(ByVal str_error As String) As Integer + Dim admin_errores As String = System.Configuration.ConfigurationManager.AppSettings("admin_errores") + If admin_errores = "no" Then + Return 0 + Else + Dim db As New Database + Return db.RunProcedure("sp_errores", New SqlParameter() {db.MakeParameter("@error", str_error)}) + End If + + End Function + +End Class diff --git a/App_Code/VBCode/elecciones.vb b/App_Code/VBCode/elecciones.vb new file mode 100644 index 0000000..32300fc --- /dev/null +++ b/App_Code/VBCode/elecciones.vb @@ -0,0 +1,213 @@ +Option Strict On + +Imports System +Imports System.Configuration +Imports System.Data +Imports System.Data.SqlClient +Imports System.Web + +Imports Microsoft.VisualBasic + +Public Class elecciones + Public Shared Function LeoBancasDiputadosNac() As SqlDataReader + LeoBancasDiputadosNac = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + db.RunProcedure("spel_bancasDiputadosNac", LeoBancasDiputadosNac) + + End Function + Public Shared Function LeoBancasSenadoresNac() As SqlDataReader + LeoBancasSenadoresNac = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + db.RunProcedure("spel_bancasSenadoresNac", LeoBancasSenadoresNac) + + End Function + Public Shared Function LeoTotalBancasDiputadosNac() As SqlDataReader + LeoTotalBancasDiputadosNac = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + db.RunProcedure("spel_totalbancasDiputadosNac", LeoTotalBancasDiputadosNac) + + End Function + Public Shared Function LeoTotalBancasSenadoresNac() As SqlDataReader + LeoTotalBancasSenadoresNac = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + db.RunProcedure("spel_totalbancasSenadoresNac", LeoTotalBancasSenadoresNac) + + End Function + Public Shared Function LeoResultadosProvincias(tipoeleccion As Int32) As SqlDataReader + LeoResultadosProvincias = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Dim parameters() As SqlParameter = {db.MakeParameter("@tipoeleccion", tipoeleccion)} + db.RunProcedure("spel_mapaprov_2015f", parameters, LeoResultadosProvincias) + + End Function + Public Shared Function LeoResultadosMunicipios(tipoeleccion As Int32) As SqlDataReader + LeoResultadosMunicipios = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Dim parameters() As SqlParameter = {db.MakeParameter("@tipoeleccion", tipoeleccion)} + db.RunProcedure("spel_mapamuni_2015f", parameters, LeoResultadosMunicipios) + + End Function + Public Shared Function LeoResultadosMunicipiosGobe(tipoeleccion As Int32) As SqlDataReader + LeoResultadosMunicipiosGobe = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Dim parameters() As SqlParameter = {db.MakeParameter("@tipoeleccion", tipoeleccion)} + db.RunProcedure("spel_mapamuni_2015fGobe", parameters, LeoResultadosMunicipiosGobe) + + End Function + Public Shared Function LeoResultadosMunicipiosLista(tipoeleccion As Int32) As SqlDataReader + LeoResultadosMunicipiosLista = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Dim parameters() As SqlParameter = {db.MakeParameter("@tipoeleccion", tipoeleccion)} + db.RunProcedure("spel_mapamuni_2015", parameters, LeoResultadosMunicipiosLista) + + End Function + Public Shared Function LeoResultadosProvinciasGobe(tipoeleccion As Int32) As SqlDataReader + LeoResultadosProvinciasGobe = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Dim parameters() As SqlParameter = {db.MakeParameter("@tipoeleccion", tipoeleccion)} + db.RunProcedure("spel_mapaprov_2015fGobe", parameters, LeoResultadosProvinciasGobe) + + End Function + Public Shared Function LeoTotalVotosPais() As Integer + LeoTotalVotosPais = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Return db.RunProcedure("spel_totalvotos_2015_presi") + + End Function + Public Shared Function LeoVotosDistrito(codeleccion As Int32, coddistrito As String) As Integer + LeoVotosDistrito = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Return db.RunProcedure("spel_LeoVotosDistrito_2015", New SqlParameter() {db.MakeParameter("@codeleccion", codeleccion), db.MakeParameter("@coddistrito", coddistrito)}) + End Function + Public Shared Function LeoVotosMunicipio(codeleccion As Int32, codmunicipio As String) As Integer + LeoVotosMunicipio = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Return db.RunProcedure("spel_LeoVotosMunicipio_2015", New SqlParameter() {db.MakeParameter("@codeleccion", codeleccion), db.MakeParameter("@codmunicipio", codmunicipio)}) + End Function + Public Shared Function LeoTotalVotosBA() As Integer + LeoTotalVotosBA = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Return db.RunProcedure("spel_votosBA_2015_presi") + + End Function + Public Shared Function LeoTotalVotosBAGobe() As Integer + LeoTotalVotosBAGobe = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Return db.RunProcedure("spel_votosBA_2015_gobe") + + End Function + + Public Shared Function LeoResultadosConu(tipoeleccion As Int32) As SqlDataReader + LeoResultadosConu = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Dim parameters() As SqlParameter = {db.MakeParameter("@tipoeleccion", tipoeleccion)} + db.RunProcedure("spel_mapaConu_2015f", parameters, LeoResultadosConu) + + End Function + + Public Shared Function LeoResultadosBA(tipoeleccion As Int32) As SqlDataReader + LeoResultadosBA = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Dim parameters() As SqlParameter = {db.MakeParameter("@tipoeleccion", tipoeleccion)} + db.RunProcedure("spel_mapaBA_2015f", parameters, LeoResultadosBA) + + End Function + + Public Shared Function LeoResultadosBAGobe(tipoeleccion As Int32) As SqlDataReader + LeoResultadosBAGobe = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Dim parameters() As SqlParameter = {db.MakeParameter("@tipoeleccion", tipoeleccion)} + db.RunProcedure("spel_mapaBA_2015fGobe", parameters, LeoResultadosBAGobe) + + End Function + Public Shared Function PorcentajeEscrutado(tipoeleccion As Int32) As SqlDataReader + PorcentajeEscrutado = Nothing + + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Dim parameters() As SqlParameter = {db.MakeParameter("@tipoeleccion", tipoeleccion)} + db.RunProcedure("spel_porcentajeescrutado_2015", parameters, PorcentajeEscrutado) + End Function + Public Shared Function PorcentajeEscrutadoBA(tipoeleccion As Int32) As SqlDataReader + PorcentajeEscrutadoBA = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Dim parameters() As SqlParameter = {db.MakeParameter("@tipoeleccion", tipoeleccion)} + db.RunProcedure("spel_porcentajeescrutadoBA_2015", parameters, PorcentajeEscrutadoBA) + End Function + Public Shared Function LeoResultadosProvinciasLista(tipoeleccion As Int32) As SqlDataReader + LeoResultadosProvinciasLista = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Dim parameters() As SqlParameter = {db.MakeParameter("@tipoeleccion", tipoeleccion)} + db.RunProcedure("spel_mapaprov_2015", parameters, LeoResultadosProvinciasLista) + + End Function + Public Shared Function LeoResultadosBALista(tipoeleccion As Int32) As SqlDataReader + LeoResultadosBALista = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Dim parameters() As SqlParameter = {db.MakeParameter("@tipoeleccion", tipoeleccion)} + db.RunProcedure("spel_mapaBA_2015", parameters, LeoResultadosBALista) + + End Function + Public Shared Function LeoResultadosBALista(codeleccion As Int32, codmunicipio As String) As SqlDataReader + LeoResultadosBALista = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Dim parameters() As SqlParameter = {db.MakeParameter("@codeleccion", codeleccion), db.MakeParameter("@codmunicipio", codmunicipio)} + db.RunProcedure("spel_cuadroBA_2015", parameters, LeoResultadosBALista) + + End Function + + Public Shared Function LeoDistritos(codeleccion As Int32) As SqlDataReader + LeoDistritos = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Dim parameters() As SqlParameter = {db.MakeParameter("@codeleccion", codeleccion)} + db.RunProcedure("spel_leodistritos_2015", parameters, LeoDistritos) + + End Function + Public Shared Function LeoResultadosxProvincia(codeleccion As Int32, coddistrito As String) As SqlDataReader + LeoResultadosxProvincia = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Dim parameters() As SqlParameter = {db.MakeParameter("@codeleccion", codeleccion), db.MakeParameter("@coddistrito", coddistrito)} + db.RunProcedure("spel_cuadroprov_2015f", parameters, LeoResultadosxProvincia) + + End Function + Public Shared Function LeoResultadosxLista(codeleccion As Int32, coddistrito As String) As SqlDataReader + LeoResultadosxLista = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Dim parameters() As SqlParameter = {db.MakeParameter("@codeleccion", codeleccion), db.MakeParameter("@coddistrito", coddistrito)} + db.RunProcedure("spel_cuadroprov_2015", parameters, LeoResultadosxLista) + + End Function + Public Shared Function PorcentajeEscrutadoxProvincia(codeleccion As Int32, coddistrito As String) As SqlDataReader + PorcentajeEscrutadoxProvincia = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_elecciones") + Dim parameters() As SqlParameter = {db.MakeParameter("@codeleccion", codeleccion), db.MakeParameter("@coddistrito", coddistrito)} + db.RunProcedure("spel_porcentajeescrutadoprov_2015", parameters, PorcentajeEscrutadoxProvincia) + End Function + + +End Class diff --git a/App_Code/VBCode/func.vb b/App_Code/VBCode/func.vb new file mode 100644 index 0000000..00fa662 --- /dev/null +++ b/App_Code/VBCode/func.vb @@ -0,0 +1,1198 @@ +Option Strict On + +Imports System.Data +Imports System.Data.SqlClient +Imports System.IO + +Imports System.Text +Imports System.Web.UI.WebControls +Imports System.Web.UI.Control + +'Imports System.Linq + +Imports System.Security.Permissions + +Public Class func + + Inherits System.Web.UI.Page + + + 'Private Const acen As String = "´" + 'Private Const a_acen As String = "á" + 'Private Const e_acen As String = "é" + 'Private Const i_acen As String = "í" + 'Private Const o_acen As String = "ó" + 'Private Const u_acen As String = "ú" + 'Private Const a_may As String = "Á" + 'Private Const e_may As String = "É" + 'Private Const i_may As String = "Í" + 'Private Const o_may As String = "Ó" + 'Private Const u_may As String = "Ú" + 'Private Const enie As String = "ñ" + 'Private Const enie_may As String = "Ñ" + 'Private Const u_dier As String = "ü" + 'Private Const s_preg As String = "¿" + 'Private Const s_admir As String = "¡" + 'Private Const com_abrir As String = "«" '' + 'Private Const com_cerrar As String = "»" '' + 'Private Const cerito As String = "°" '' + Private Const com_abrir1 As String = "“" + Private Const com_abrir2 As String = "”" + 'Private Const cedilla As String = "ç" '' + 'Private Const achiquita As String = "ª" '' + ''Private Const ampersand As String = "&" + Public Shared limite_bajada As Integer = CInt(System.Configuration.ConfigurationManager.AppSettings("limite_bajada")) + Public Shared admin_errores As String = System.Configuration.ConfigurationManager.AppSettings("admin_errores") + '' Esto viene de BASE_3 y es para IMPERSONAR + + Public Shared LOGON32_LOGON_INTERACTIVE As Integer = 2 + Public Shared LOGON32_PROVIDER_DEFAULT As Integer = 0 + + Public Shared impersonationContext As System.Security.Principal.WindowsImpersonationContext + + Declare Function LogonUserA Lib "advapi32.dll" (ByVal lpszUsername As String, _ + ByVal lpszDomain As String, _ + ByVal lpszPassword As String, _ + ByVal dwLogonType As Integer, _ + ByVal dwLogonProvider As Integer, _ + ByRef phToken As IntPtr) As Integer + + Declare Auto Function DuplicateToken Lib "advapi32.dll" ( _ + ByVal ExistingTokenHandle As IntPtr, _ + ByVal ImpersonationLevel As Integer, _ + ByRef DuplicateTokenHandle As IntPtr) As Integer + + Declare Auto Function RevertToSelf Lib "advapi32.dll" () As Long + Declare Auto Function CloseHandle Lib "kernel32.dll" (ByVal handle As IntPtr) As Long + + _ + Public Shared Function impersonateValidUser(ByVal userName As String, ByVal domain As String, ByVal password As String) As Boolean + + Dim tempWindowsIdentity As System.Security.Principal.WindowsIdentity + Dim token As IntPtr = IntPtr.Zero + Dim tokenDuplicate As IntPtr = IntPtr.Zero + impersonateValidUser = False + + If CBool(RevertToSelf()) Then + If LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, token) <> 0 Then + If DuplicateToken(token, 2, tokenDuplicate) <> 0 Then + tempWindowsIdentity = New System.Security.Principal.WindowsIdentity(tokenDuplicate) + impersonationContext = tempWindowsIdentity.Impersonate() + If Not impersonationContext Is Nothing Then + impersonateValidUser = True + End If + End If + End If + End If + If Not tokenDuplicate.Equals(IntPtr.Zero) Then + CloseHandle(tokenDuplicate) + End If + If Not token.Equals(IntPtr.Zero) Then + CloseHandle(token) + End If + End Function + + Public Shared Sub undoImpersonation() + impersonationContext.Undo() + End Sub + + Public Shared Function RetornaImagen(ByVal str_archivo As String) As Drawing.Image + Dim imagen As System.Drawing.Image + Dim fs As System.IO.FileStream + fs = New System.IO.FileStream(str_archivo, IO.FileMode.Open, IO.FileAccess.Read) + imagen = System.Drawing.Image.FromStream(fs) + fs.Close() + Return imagen + End Function + + Public Shared Function LeeIndicadores(ByVal fecha As String, ByVal n_seccion As Integer) As SqlDataReader + LeeIndicadores = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_lee_indicadores", New SqlParameter() {db.MakeParameter("@fecha", fecha), db.MakeParameter("@n_seccion", n_seccion)}, LeeIndicadores) + End Function + + Public Shared Function LeeHace(ByVal fecha As String) As SqlDataReader + LeeHace = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_lee_hace", New SqlParameter() {db.MakeParameter("@fecha", fecha)}, LeeHace) + End Function + + + Public Shared Function MuestraOpiniones(ByVal idNoticia As Long, ByVal origen As Integer, ByVal cant As Integer) As SqlDataReader + MuestraOpiniones = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_muestra_opiniones", New SqlParameter() {db.MakeParameter("@idNoticia", idNoticia), _ + db.MakeParameter("@origen", origen), db.MakeParameter("@cant", cant)}, MuestraOpiniones) + End Function + + Public Shared Function MuestraOpinionesRelacionadas(ByVal idNoticia As Long, ByVal orden As Integer) As SqlDataReader + MuestraOpinionesRelacionadas = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_muestra_opiniones_rel", New SqlParameter() {db.MakeParameter("@idNoticia", idNoticia), _ + db.MakeParameter("@orden", orden)}, MuestraOpinionesRelacionadas) + End Function + + Public Shared Function CuentaOpiniones(ByVal idNoticia As Long, ByVal origen As Integer) As Integer + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + Return db.RunProcedure("sp_cuenta_opiniones", New SqlParameter() {db.MakeParameter("@idNoticia", idNoticia), db.MakeParameter("@origen", origen)}) + End Function + + Public Shared Function CuentaReportadas(ByVal id_usuario As Long) As String + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + Return db.RunProcstring("sp_cuenta_reportadas", New SqlParameter() {db.MakeParameter("@id_usuario", id_usuario)}) + End Function + + ' Public Shared Sub EditaUsu(ByVal id_usu As Integer, ByVal clave As String, ByVal Direccion As String, _ + 'ByVal telefono As String, ByVal documento As String, ByVal fecha_edicion As Date, ByVal titulares As Integer, ByVal foto As Boolean) + ' Dim db As New Database + ' db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + ' db.RunProcedure("sp_EditaUsu", New SqlParameter() {db.MakeParameter("@id_usu", id_usu), _ + ' db.MakeParameter("@clave", clave), db.MakeParameter("@direccion", Direccion), _ + ' db.MakeParameter("@telefono ", telefono), db.MakeParameter("@documento", documento), db.MakeParameter("@fecha_edicion", fecha_edicion), db.MakeParameter("@titulares", titulares), db.MakeParameter("@foto", foto)}) + ' End Sub + + Public Shared Sub EditaUsu(ByVal id_usu As Integer, ByVal clave As String, ByVal Direccion As String, _ + ByVal telefono As String, ByVal documento As String, ByVal ocupacion As String, ByVal provincia As Integer, ByVal localidad As Integer, _ + ByVal CodPostal As String, ByVal fecha_edicion As Date, ByVal titulares As Integer, ByVal foto As Boolean, ByVal autorizo As Boolean) + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + db.RunProcedure("sp_EditaUsu", New SqlParameter() {db.MakeParameter("@id_usu", id_usu), _ + db.MakeParameter("@clave", clave), db.MakeParameter("@direccion", Direccion), db.MakeParameter("@telefono ", telefono), _ + db.MakeParameter("@documento", documento), db.MakeParameter("@ocupacion", ocupacion), db.MakeParameter("@provincia", provincia), _ + db.MakeParameter("@localidad", localidad), db.MakeParameter("@CodPostal", CodPostal), _ + db.MakeParameter("@fecha_edicion", fecha_edicion), db.MakeParameter("@titulares", titulares), db.MakeParameter("@foto", foto), db.MakeParameter("@autorizo", autorizo)}) + End Sub + + Public Shared Sub BorraUsu(ByVal id As Integer) + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + db.RunProcedure("sp_borrausu", New SqlParameter() {db.MakeParameter("@id", id)}) + End Sub + + Public Shared Function LoginUsu(ByVal usuario As String, ByVal clave As String) As SqlDataReader + LoginUsu = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_usulogin", New SqlParameter() {db.MakeParameter("@usuario", usuario), db.MakeParameter("@clave", clave)}, LoginUsu) + End Function + + Public Shared Function LoginUsuSuscripcion(id_cliente As Int64) As SqlDataReader + LoginUsuSuscripcion = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clientes") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_HaySuscripcion", New SqlParameter() {db.MakeParameter("@id_cliente", id_cliente)}, LoginUsuSuscripcion) + End Function + + Public Shared Sub HabilitaCuenta(ByVal usuario As String, ByVal titulares As Integer) + + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + db.RunProcedure("sp_habilita_cuenta", New SqlParameter() {db.MakeParameter("@usuario", usuario), db.MakeParameter("@titulares", titulares)}) + End Sub + + Public Shared Sub ActualizaCuenta(ByVal id As Integer, ByVal estado As Integer) + + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + db.RunProcedure("sp_actualiza_cuenta", New SqlParameter() {db.MakeParameter("@id", id), db.MakeParameter("@estado", estado)}) + End Sub + + Public Shared Sub HabilitaAmigo(ByVal n_origen As Int64, ByVal n_dest As Int64) + + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + db.RunProcedure("sp_habilita_amigo", New SqlParameter() {db.MakeParameter("@n_origen", n_origen), db.MakeParameter("@n_dest", n_dest)}) + End Sub + + Public Shared Function ver_UsuClave(ByVal email As String, ByVal usuario As String) As SqlDataReader + ver_UsuClave = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_usuclave", New SqlParameter() {db.MakeParameter("@email", email), db.MakeParameter("@usuario", usuario)}, ver_UsuClave) + End Function + + Public Shared Function ver_UsuDatos(ByVal email As String) As SqlDataReader + ver_UsuDatos = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_usudatos", New SqlParameter() {db.MakeParameter("@email", email)}, ver_UsuDatos) + End Function + + Public Shared Function NuevoUsuario(ByVal nombre As String, ByVal apellido As String, ByVal usuario As String, _ + ByVal clave As String, ByVal email As String, ByVal fecha_nac As Date, ByVal telefono As String, ByVal direccion As String, _ + ByVal documento As String, ByVal foto As Boolean, ByVal estado As Integer, ByVal ultimo_login As Date, ByVal Fecha_alta As Date, _ + ByVal Fecha_edicion As Date, ByVal observaciones As String, ByVal n_comentarios As Integer, ByVal n_denreal As Integer, ByVal n_denrec As Integer, _ + ByVal n_denconc As Integer, ByVal n_titulares As Integer) As Integer + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + + Dim parameters() As SqlParameter = {db.MakeParameter("@id", ParameterDirection.Output, 0), _ + db.MakeParameter("@nombre", nombre), db.MakeParameter("@apellido", apellido), db.MakeParameter("@usuario", usuario), _ + db.MakeParameter("@clave", clave), db.MakeParameter("@email", email), db.MakeParameter("@fecha_nac", fecha_nac), _ + db.MakeParameter("@telefono", telefono), db.MakeParameter("@direccion", direccion), db.MakeParameter("@documento", documento), _ + db.MakeParameter("@foto", foto), db.MakeParameter("@estado", estado), db.MakeParameter("@ultimo_login", ultimo_login), _ + db.MakeParameter("@fecha_alta", Fecha_alta), db.MakeParameter("@fecha_edicion", Fecha_edicion), db.MakeParameter("@observaciones", observaciones), _ + db.MakeParameter("@n_comentarios", n_comentarios), db.MakeParameter("@n_denreal", n_denreal), db.MakeParameter("@n_denrec", n_denrec), _ + db.MakeParameter("@n_denconc", n_denconc), db.MakeParameter("@n_titulares", n_titulares)} + + db.RunProcedure("sp_nuevousuario", parameters) + + NuevoUsuario = CInt(parameters(0).Value) + End Function + + Public Shared Function GuardaBuscado(ByVal str_nombre As String, ByVal int_edad As Integer, ByVal str_lugar As String, ByVal str_buscador As String, _ + ByVal bool_foto As Boolean, ByVal str_contacto As String) As Integer + + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim parameters() As SqlParameter = {db.MakeParameter("@id", ParameterDirection.Output, 0), _ + db.MakeParameter("@str_nombre", str_nombre), db.MakeParameter("@int_edad", int_edad), _ + db.MakeParameter("@str_lugar", str_lugar), db.MakeParameter("@str_buscador", str_buscador), db.MakeParameter("@bool_foto", bool_foto), db.MakeParameter("@str_contacto", str_contacto)} + + db.RunProcedure("sp_guarda_buscado", parameters) + GuardaBuscado = CInt(parameters(0).Value) + End Function + + Public Shared Function GuardaMascota(ByVal str_tipo As String, ByVal str_desc As String, ByVal str_nombre As String, ByVal str_lugar As String, ByVal str_buscador As String, _ + ByVal bool_foto As Boolean, ByVal str_contacto As String) As Integer + + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim parameters() As SqlParameter = {db.MakeParameter("@id", ParameterDirection.Output, 0), _ + db.MakeParameter("@str_tipo", str_tipo), db.MakeParameter("@str_desc", str_desc), db.MakeParameter("@str_nombre", str_nombre), _ + db.MakeParameter("@str_lugar", str_lugar), db.MakeParameter("@str_buscador", str_buscador), db.MakeParameter("@bool_foto", bool_foto), db.MakeParameter("@str_contacto", str_contacto)} + + db.RunProcedure("sp_guarda_mascota", parameters) + GuardaMascota = CInt(parameters(0).Value) + End Function + + ' se agreg Autorizo + Public Shared Function NuevoUsuario(ByVal nombre As String, ByVal apellido As String, ByVal usuario As String, _ + ByVal clave As String, ByVal email As String, ByVal fecha_nac As Date, ByVal telefono As String, ByVal direccion As String, _ + ByVal provincia As Int32, ByVal localidad As Int32, ByVal CodPostal As String, _ + ByVal documento As String, ByVal ocupacion As String, ByVal foto As Boolean, ByVal estado As Integer, ByVal ultimo_login As Date, ByVal Fecha_alta As Date, _ + ByVal Fecha_edicion As Date, ByVal observaciones As String, ByVal n_comentarios As Integer, ByVal n_denreal As Integer, ByVal n_denrec As Integer, _ + ByVal n_denconc As Integer, ByVal n_titulares As Integer, ByVal Autorizo As Boolean) As Integer + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + + Dim parameters() As SqlParameter = {db.MakeParameter("@id", ParameterDirection.Output, 0), _ + db.MakeParameter("@nombre", nombre), db.MakeParameter("@apellido", apellido), db.MakeParameter("@usuario", usuario), _ + db.MakeParameter("@clave", clave), db.MakeParameter("@email", email), db.MakeParameter("@fecha_nac", fecha_nac), _ + db.MakeParameter("@telefono", telefono), db.MakeParameter("@direccion", direccion), _ + db.MakeParameter("@provincia", provincia), db.MakeParameter("@localidad", localidad), db.MakeParameter("@CodPostal", CodPostal), _ + db.MakeParameter("@documento", documento), db.MakeParameter("@ocupacion", ocupacion), _ + db.MakeParameter("@foto", foto), db.MakeParameter("@estado", estado), db.MakeParameter("@ultimo_login", ultimo_login), _ + db.MakeParameter("@fecha_alta", Fecha_alta), db.MakeParameter("@fecha_edicion", Fecha_edicion), db.MakeParameter("@observaciones", observaciones), _ + db.MakeParameter("@n_comentarios", n_comentarios), db.MakeParameter("@n_denreal", n_denreal), db.MakeParameter("@n_denrec", n_denrec), _ + db.MakeParameter("@n_denconc", n_denconc), db.MakeParameter("@n_titulares", n_titulares), db.MakeParameter("@Autorizo", Autorizo)} + + db.RunProcedure("sp_nuevousuario", parameters) + + NuevoUsuario = CInt(parameters(0).Value) + End Function + + ' se agreg n_Sitio + Public Shared Function NuevoUsuario(ByVal nombre As String, ByVal apellido As String, ByVal usuario As String, _ + ByVal clave As String, ByVal email As String, ByVal fecha_nac As Date, ByVal telefono As String, ByVal direccion As String, _ + ByVal provincia As Int32, ByVal localidad As Int32, ByVal CodPostal As String, _ + ByVal documento As String, ByVal ocupacion As String, ByVal foto As Boolean, ByVal estado As Integer, ByVal ultimo_login As Date, ByVal Fecha_alta As Date, _ + ByVal Fecha_edicion As Date, ByVal observaciones As String, ByVal n_comentarios As Integer, ByVal n_denreal As Integer, ByVal n_denrec As Integer, _ + ByVal n_denconc As Integer, ByVal n_titulares As Integer, ByVal Autorizo As Boolean, ByVal n_Sitio As Integer) As Integer + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + + Dim parameters() As SqlParameter = {db.MakeParameter("@id", ParameterDirection.Output, 0), _ + db.MakeParameter("@nombre", nombre), db.MakeParameter("@apellido", apellido), db.MakeParameter("@usuario", usuario), _ + db.MakeParameter("@clave", clave), db.MakeParameter("@email", email), db.MakeParameter("@fecha_nac", fecha_nac), _ + db.MakeParameter("@telefono", telefono), db.MakeParameter("@direccion", direccion), _ + db.MakeParameter("@provincia", provincia), db.MakeParameter("@localidad", localidad), db.MakeParameter("@CodPostal", CodPostal), _ + db.MakeParameter("@documento", documento), db.MakeParameter("@ocupacion", ocupacion), _ + db.MakeParameter("@foto", foto), db.MakeParameter("@estado", estado), db.MakeParameter("@ultimo_login", ultimo_login), _ + db.MakeParameter("@fecha_alta", Fecha_alta), db.MakeParameter("@fecha_edicion", Fecha_edicion), db.MakeParameter("@observaciones", observaciones), _ + db.MakeParameter("@n_comentarios", n_comentarios), db.MakeParameter("@n_denreal", n_denreal), db.MakeParameter("@n_denrec", n_denrec), _ + db.MakeParameter("@n_denconc", n_denconc), db.MakeParameter("@n_titulares", n_titulares), db.MakeParameter("@Autorizo", Autorizo), _ + db.MakeParameter("@n_Sitio", n_Sitio)} + + db.RunProcedure("sp_nuevousuario", parameters) + + NuevoUsuario = CInt(parameters(0).Value) + End Function + + Public Shared Function ver_usumail(ByVal email As String) As SqlDataReader + ver_usumail = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_usumail", New SqlParameter() {db.MakeParameter("@email", email)}, ver_usumail) + End Function + + Public Shared Function ver_datosusu(ByVal usuario As String) As SqlDataReader + ver_datosusu = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + db.RunProcedure("sp_datosusu", New SqlParameter() {db.MakeParameter("@usuario", usuario)}, ver_datosusu) + End Function + + Public Shared Function ver_datosusu(ByVal id_usu As Int64) As SqlDataReader + ver_datosusu = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + db.RunProcedure("sp_datosusu_id", New SqlParameter() {db.MakeParameter("@id_usu", id_usu)}, ver_datosusu) + End Function + + Public Shared Function Puntos_suspensivos(ByVal str_bajada As String, ByVal int_limite As Integer) As String + 'str_bajada = "
la vaca

El intendente Pablo Bruera presentó ayer junto a pasteleros la torta solidaria por el 130º aniversario de la Ciudad. Como se informó, se trata de una réplica a escala, de chocolate, del Palacio Municipal. Este año es a beneficio del Hospital de Niños, Cáritas y la fundación “Volver a empezar”

Video de YouTube


" + 'str_bajada = "

El intendente Pablo Bruera presentó ayer junto a pasteleros la torta solidaria por el 130º aniversario de la Ciudad. Como se informó, se trata de una réplica a escala, de chocolate, del Palacio Municipal. Este año es a beneficio del Hospital de Niños, Cáritas y la fundación “Volver a empezar”

" + 'str_bajada = "
" + 'While str_bajada.IndexOf("= 0 + ' str_bajada = str_bajada.Remove(str_bajada.IndexOf("") + 5 - str_bajada.IndexOf("[^<]+" + Dim rgx1 As New RegularExpressions.Regex(pattern, options) + str_bajada = rgx1.Replace(str_bajada, "") + '' vuelve a el original + str_bajada = str_bajada.Replace("!", "<") + str_bajada = str_bajada.Replace("", "") + + + ''''''No sirve para galeras y audios + 'Dim options As RegexOptions = RegexOptions.IgnoreCase Or RegexOptions.Multiline + ' '' videos con tags internos, primero remueve los tags: + 'Dim pattern As String = "[^<]+<\/strong>" ' "(]+>)[^<]+(<\/div>)" ' ' + 'Dim rgx1 As New Regex(pattern, options) + 'str_bajada = rgx1.Replace(str_bajada, "") + 'pattern = "<\/param>" + 'Dim rgx2 As New Regex(pattern, options) + 'str_bajada = rgx2.Replace(str_bajada, "") + 'pattern = "<\/embed>" + 'Dim rgx3 As New Regex(pattern, options) + 'str_bajada = rgx3.Replace(str_bajada, "") + 'pattern = "<\/object>" + 'Dim rgx4 As New Regex(pattern, options) + 'str_bajada = rgx4.Replace(str_bajada, "") + '' saca los br + 'str_bajada = str_bajada.Replace("
", " ") + + Dim n_pos As Integer + + '' str_bajada = "

Por ALEJANDRO CASTAEDA





afcastab@gmail.com

" + + If str_bajada.Length > int_limite Then + n_pos = str_bajada.IndexOf(" ", int_limite) + If n_pos > 0 Then + str_bajada = str_bajada.Substring(0, n_pos) + " ..." + ''Primero saco los que no tengan el cierre antes del punto suspensivo + If str_bajada.LastIndexOf(" str_bajada.LastIndexOf("") Then + str_bajada = str_bajada.Remove(str_bajada.IndexOf("") > str_bajada.LastIndexOf("") Then + str_bajada += "" + End If + If str_bajada.LastIndexOf("") > str_bajada.LastIndexOf("") Then + str_bajada += "" + End If + If str_bajada.LastIndexOf(" str_bajada.LastIndexOf("") > str_bajada.LastIndexOf("") Then + str_bajada += "" + End If + If str_bajada.LastIndexOf(" str_bajada.LastIndexOf("") Then + str_bajada += "" + End If + If str_bajada.LastIndexOf(" str_bajada.LastIndexOf("") Then + str_bajada += "" + End If + If str_bajada.LastIndexOf(" str_bajada.LastIndexOf("

") Then + str_bajada += "

" + End If + + End If + End If + Return func.ConvertUTF(str_bajada) + End Function + + Public Shared Function Puntos_suspensivos(ByVal str_bajada As String) As String + Dim n_pos As Integer + If str_bajada.Length > limite_bajada Then + n_pos = str_bajada.IndexOf(" ", limite_bajada) + If n_pos > 0 Then + str_bajada = str_bajada.Substring(0, n_pos) + " ..." + End If + End If + Return func.ConvertUTF(str_bajada) + End Function + + + Public Shared Sub CuentaEncuesta(ByVal id_opcion As Long) + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_cuenta_encuesta", New SqlParameter() {db.MakeParameter("@id", id_opcion)}) + End Sub + + Public Shared Function LeeOpciones(ByVal id_encuesta As Long) As SqlDataReader + LeeOpciones = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_lee_opciones", New SqlParameter() {db.MakeParameter("@id", id_encuesta)}, LeeOpciones) + End Function + + Public Shared Function CuentaOpcionesEncuesta(ByVal id_encuesta As Long) As Integer + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + Return db.RunProcedure("sp_cuenta_opciones", New SqlParameter() {db.MakeParameter("@id", id_encuesta)}) + End Function + + Public Shared Function LeeEncuesta(ByVal idNoticia As Long) As SqlDataReader + LeeEncuesta = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_existe_encuesta", New SqlParameter() {db.MakeParameter("@idNoticia", idNoticia)}, LeeEncuesta) + End Function + + Public Shared Sub GraboOpinion(ByVal idn As Int64, ByVal origen As Integer, ByVal remote_ip As String, ByVal opinion As String, ByVal id_usu As Int64) + Dim db As New Database + db.RunProcedure("sp_GraboOpinion", New SqlParameter() {db.MakeParameter("@idn", idn), _ + db.MakeParameter("@origen", origen), db.MakeParameter("@remote_ip", remote_ip), db.MakeParameter("@opinion", opinion), _ + db.MakeParameter("@id_usu", id_usu)}) + End Sub + + Public Shared Sub AgregoExitosos(ByVal id_usu As Int64) + Dim db As New Database + db.RunProcedure("sp_AgregoExitosos", New SqlParameter() {db.MakeParameter("@id_usu", id_usu)}) + End Sub + + Public Shared Function BuscoDenunciantes(ByVal idc As Int64) As SqlDataReader + BuscoDenunciantes = Nothing + Dim db As New Database + db.RunProcedure("sp_BuscoDenunciantes", New SqlParameter() {db.MakeParameter("@idc", idc)}, BuscoDenunciantes) + End Function + + Public Shared Sub AceptaDenuncia(ByVal idc As Int64, ByVal id_denunciado As Int64) + Dim db As New Database + db.RunProcedure("sp_AceptaDenuncia", New SqlParameter() {db.MakeParameter("@idc", idc), db.MakeParameter("@id_denunciado", id_denunciado)}) + End Sub + + Public Shared Sub SumaUnoDenuncias(ByVal id_usu As Int64, ByVal id_denunciado As Int64) + Dim db As New Database + db.RunProcedure("sp_sumaUnoDenuncia", New SqlParameter() {db.MakeParameter("@id_usu", id_usu), db.MakeParameter("@id_denunciado", id_denunciado)}) + End Sub + + Public Shared Function sumaDenuncia(ByVal idc As Int64, ByVal cantidad As Integer) As SqlDataReader + sumaDenuncia = Nothing + Dim db As New Database + db.RunProcedure("sp_sumaDenuncia", New SqlParameter() {db.MakeParameter("@idc", idc), db.MakeParameter("@cantidad", cantidad)}, sumaDenuncia) + End Function + + Public Shared Sub agregaDenuncia(ByVal idc As Int64, ByVal id_usu As Int64, ByVal ip_origen As String) + Dim db As New Database + db.RunProcedure("sp_agregaDenuncia", New SqlParameter() {db.MakeParameter("@idc", idc), db.MakeParameter("@id_usu", id_usu), db.MakeParameter("@ip", ip_origen)}) + End Sub + + Public Shared Function verDenuncias(ByVal idc As Int64, ByVal id_usu As Int64) As Boolean + Dim db As New Database + Return db.RunProcBool("sp_verDenuncias", New SqlParameter() {db.MakeParameter("@idc", idc), db.MakeParameter("@id_usu", id_usu)}) + End Function + + Public Shared Function LeeOpiniones(ByVal idNoticia As Long, ByVal origen As Integer) As SqlDataReader + LeeOpiniones = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_lee_opiniones", New SqlParameter() {db.MakeParameter("@idNoticia", idNoticia), _ + db.MakeParameter("@origen", origen)}, LeeOpiniones) + End Function + + Public Shared Function LeeVotos(ByVal idNoticia As Long) As SqlDataReader + LeeVotos = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_lee_votos", New SqlParameter() {db.MakeParameter("@idNoticia", idNoticia)}, LeeVotos) + End Function + + Public Shared Sub cuenta_votos(ByVal idNoticia As Long, ByVal origen As Integer) + '' cada vez que alguien vota, agrega uno + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + db.RunProcedure("sp_cuenta_votos", New SqlParameter() {db.MakeParameter("@idNoticia", idNoticia), db.MakeParameter("@origen", origen)}) + End Sub + + Public Shared Function LeeNota(ByVal categoria As Integer) As SqlDataReader + LeeNota = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("spcu_leenota", New SqlParameter() {db.MakeParameter("@categoria", categoria)}, LeeNota) + End Function + + Public Shared Function LeeNotax(ByVal categoria As Integer, ByVal suple As Integer, ByVal fecha_limite As String) As SqlDataReader + LeeNotax = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("spx_leenota", New SqlParameter() {db.MakeParameter("@categoria", categoria), db.MakeParameter("@suple", suple), db.MakeParameter("@fecha_limite", fecha_limite)}, LeeNotax) + End Function + + Public Shared Function LeeNotaCu(ByVal categoria As Integer, ByVal fecha_limite As String) As SqlDataReader + LeeNotaCu = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("spcu_leenota", New SqlParameter() {db.MakeParameter("@categoria", categoria), db.MakeParameter("@fecha_limite", fecha_limite)}, LeeNotaCu) + End Function + + Public Shared Function LeeCol(ByVal fecha As String, ByVal col As Integer, ByVal n_secc As Integer, ByVal mos As Boolean) As SqlDataReader + LeeCol = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + db.RunProcedure("sp_lee_columnas", New SqlParameter() {db.MakeParameter("@fecha", fecha), _ + db.MakeParameter("@col", col), db.MakeParameter("@n_secc", n_secc), db.MakeParameter("@mos", mos)}, LeeCol) + End Function + + Public Shared Function LeeSaludos(ByVal Identificador As Integer) As SqlDataReader + LeeSaludos = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_leesaludos", New SqlParameter() {db.MakeParameter("@Identificador", Identificador)}, LeeSaludos) + End Function + + Public Shared Function InsertaSaludo(ByVal Remitente As String, ByVal Mensaje As String, _ + ByVal Epigrafe As String, ByVal foto As Boolean, ByVal aprobado As Boolean, ByVal Identificador As Integer) As Integer + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + + Dim parameters() As SqlParameter = {db.MakeParameter("@id", ParameterDirection.Output, 0), _ + db.MakeParameter("@Remitente", Remitente), db.MakeParameter("@Mensaje", Mensaje), _ + db.MakeParameter("@epigrafe", Epigrafe), db.MakeParameter("@foto", foto), db.MakeParameter("@aprobado", aprobado), _ + db.MakeParameter("@Identificador", Identificador)} + + db.RunProcedure("sp_insertasaludo", parameters) + + InsertaSaludo = CInt(parameters(0).Value) + End Function + + Public Shared Function InsertaMensaje(ByVal Hijos As String, ByVal Madre As String, ByVal Mensaje As String, _ + ByVal email As String, ByVal foto As Boolean, ByVal aprobado As Boolean) As Integer + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + + Dim parameters() As SqlParameter = {db.MakeParameter("@id", ParameterDirection.Output, 0), _ + db.MakeParameter("@Hijos", Hijos), db.MakeParameter("@Madre", Madre), db.MakeParameter("@Mensaje", Mensaje), _ + db.MakeParameter("@email", email), db.MakeParameter("@foto", foto), db.MakeParameter("@aprobado", True)} + + db.RunProcedure("sp_insertamensaje", parameters) + + InsertaMensaje = CInt(parameters(0).Value) + End Function + + Public Shared Function leemensaje(ByVal Id As Integer) As SqlDataReader + leemensaje = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_leemensaje", New SqlParameter() {db.MakeParameter("@Id", Id)}, leemensaje) + End Function + + 'Public Shared Sub EditaPerfil(ByVal id_usu As Integer, ByVal email As String, ByVal Direccion As String, _ + 'ByVal telefono As String, ByVal dni As String, ByVal titulares As Integer, ByVal imagen As Integer) + + ' Dim db As New Database + ' db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clasi3") + ' db.RunProcedure("sp_EditaPerfil", New SqlParameter() {db.MakeParameter("@id_usu", id_usu), _ + ' db.MakeParameter("@email", email), db.MakeParameter("@direccion", Direccion), _ + ' db.MakeParameter("@telefono ", telefono), db.MakeParameter("@dni", dni), db.MakeParameter("@titulares", titulares), db.MakeParameter("@imagen", imagen)}) + + 'End Sub + + Public Shared Function extrae_hora_vinc(ByVal hora As String) As String + If hora.Length >= 18 Then + If IsNumeric(hora.Replace(".htm", "")) Then + Dim str_hora As String + str_hora = hora.Substring(14, 4) + Return "  |  " + _ + str_hora.Chars(0) + str_hora.Chars(1) + ":" + str_hora.Chars(2) + str_hora.Chars(3) + _ + "" + Else + Return "" + End If + Else + Return "" + End If + End Function + + Public Shared Function especiales() As SqlDataReader + especiales = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_especiales", especiales) + + End Function + + '' para ver si se publica el vnculo de agregar comentarios: + Public Shared Function ver_comentario(ByVal IdNoticia As Long) As SqlDataReader + ver_comentario = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_pub_comentario", New SqlParameter() {db.MakeParameter("@IdNoticia", IdNoticia)}, ver_comentario) + End Function + + Public Shared Function ver_signo(ByVal fechahoy As String) As SqlDataReader + ver_signo = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_versigno", New SqlParameter() {db.MakeParameter("@fechahoy", fechahoy)}, ver_signo) + End Function + + Public Shared Function lee_horos(ByVal f1 As String, ByVal f2 As String) As SqlDataReader + lee_horos = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_leehoros", New SqlParameter() {db.MakeParameter("@f1", f1), db.MakeParameter("@f2", f2)}, lee_horos) + + End Function + + Public Shared Function lee_signos(ByVal id As Integer) As SqlDataReader + lee_signos = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_leesignos", New SqlParameter() {db.MakeParameter("@id", id)}, lee_signos) + + End Function + + Public Shared Function ver_signochino(ByVal aohoy As String) As SqlDataReader + ver_signochino = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_versignochino", New SqlParameter() {db.MakeParameter("@aohoy", aohoy)}, ver_signochino) + + End Function + + Public Shared Function lee_chino(ByVal f1 As String, ByVal f2 As String) As SqlDataReader + lee_chino = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_leechino", New SqlParameter() {db.MakeParameter("@f1", f1), db.MakeParameter("@f2", f2)}, lee_chino) + + End Function + + Public Shared Function lee_suerte(ByVal f1 As String, ByVal f2 As String) As SqlDataReader + lee_suerte = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_leesuerte", New SqlParameter() {db.MakeParameter("@f1", f1), db.MakeParameter("@f2", f2)}, lee_suerte) + + End Function + + + Public Shared Sub InsertaTemasEnForos(ByVal titulo As String, ByVal desarrollo As String, ByVal autor As String, ByVal seccion As String) + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + db.RunProcedure("Foro_insertar_nuevo", New SqlParameter() {db.MakeParameter("@titulo", titulo), db.MakeParameter("@desarrollo", desarrollo), _ + db.MakeParameter("@autor", autor), db.MakeParameter("@seccion", seccion)}) + End Sub + + + + Public Shared Function lee_signoschinos(ByVal id As Integer) As SqlDataReader + lee_signoschinos = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_leesignoschinos", New SqlParameter() {db.MakeParameter("@id", id)}, lee_signoschinos) + + End Function + + Public Shared Function fecha1(ByVal fecha As String, ByVal incremento As Integer) As Date + If fecha Is Nothing Then + Return Date.Now + Else + Try + Return (DateTime.Parse(fecha.Substring(0, 4) + "/" + fecha.Substring(4, 2) + "/" + fecha.Substring(6, 2))).AddDays(incremento) ' fecha siguiente + + Catch ex As Exception + admin.errores(func.admin_errores + "func.fecha1: " + fecha) + Return Date.Now + End Try + End If + End Function + + 'Public Shared Function auth_copia(ByVal str_usuario As String, ByVal str_passw As String) As SqlDataReader + + ' Dim db As New Database + ' db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clasi3") + ' auth_copia = Nothing + ' db.RunProcedure("sp_autoriza_copia", New SqlParameter() {db.MakeParameter("@usuario", str_usuario), _ + ' db.MakeParameter("@passw", str_passw)}, auth_copia) + + 'End Function + 'Public Shared Function auth(ByVal str_usuario As String, ByVal str_passw As String) As SqlDataReader + + ' Dim db As New Database + ' db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clasi3") + ' auth = Nothing + ' db.RunProcedure("sp_autoriza", New SqlParameter() {db.MakeParameter("@usuario", str_usuario), _ + ' db.MakeParameter("@passw", str_passw)}, auth) + + 'End Function + + 'Public Shared Sub cuenta_visitas(ByVal id As Integer, ByVal fecha As Date) + ' '' cada vez que alguien se registra, agrega uno + ' Dim db As New Database + ' db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clasi3") + ' Dim DReader As SqlDataReader = Nothing + ' db.RunProcedure("sp_visitas", New SqlParameter() {db.MakeParameter("@id", id), _ + ' db.MakeParameter("@fecha", fecha)}, DReader) + 'End Sub + + 'Public Shared Function DatosPlanilla(ByVal id1 As Integer, ByVal id2 As Integer) As SqlDataReader + ' 'para armar la planilla de datos del posible usuario + ' Dim db As New Database + ' db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clasi3") + ' DatosPlanilla = Nothing + ' db.RunProcedure("sp_regdatos", New SqlParameter() {db.MakeParameter("@id1", id1), db.MakeParameter("@id2", id2)}, _ + ' DatosPlanilla) + 'End Function + + + 'Public Shared Function ver_mail(ByVal email As String) As SqlDataReader + ' ver_mail = Nothing + ' Dim db As New Database + ' db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clasi3") + ' Dim DReader As SqlDataReader = Nothing + ' db.RunProcedure("sp_vermail", New SqlParameter() {db.MakeParameter("@email", email)}, ver_mail) + + 'End Function + + 'Public Shared Sub olvido(ByVal id As Integer) + ' Dim db As New Database + ' db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clasi3") + ' db.RunProcedure("sp_olvido", New SqlParameter() {db.MakeParameter("@id", id)}) + 'End Sub + + + 'Public Shared Function ver_usu(ByVal usuario As String) As SqlDataReader + ' ver_usu = Nothing + ' Dim db As New Database + ' db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clasi3") + ' db.RunProcedure("sp_usuario", New SqlParameter() {db.MakeParameter("@usuario", usuario)}, ver_usu) + 'End Function + + 'Public Shared Sub borrar(ByVal id As Integer, ByVal usuario As String) + ' Dim db As New Database + ' db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clasi3") + ' db.RunProcedure("sp_borrar", New SqlParameter() {db.MakeParameter("@id", id), _ + ' db.MakeParameter("@usuario", usuario)}) + 'End Sub + + 'Public Shared Sub AddUsu(ByVal apellido As String, ByVal nombre As String, ByVal f_nac As Date, _ + 'ByVal direccion As String, ByVal localidad As String, ByVal provincia As String, ByVal pais As String, _ + 'ByVal postal As String, ByVal e_mail As String, ByVal usuario As String, ByVal comen As String, _ + 'ByVal n_visitas As Integer, ByVal fecha_ini As Date, ByVal fecha_ult As Date, _ + 'ByVal fecha_alta As Date, ByVal autorizo As Int16, ByVal nivel As Int16, ByVal sec_origen As Int16, _ + 'ByVal ocupacion As Int16, ByVal cargo As Int16, ByVal conexion As Int16, ByVal passw As String) + ' Dim db As New Database + ' db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clasi3") + ' db.RunProcedure("sp_addusu", New SqlParameter() {db.MakeParameter("@apellido", apellido), _ + ' db.MakeParameter("@nombre", nombre), db.MakeParameter("@f_nac", f_nac), db.MakeParameter("@direccion", direccion), _ + ' db.MakeParameter("@localidad", localidad), db.MakeParameter("@provincia", provincia), db.MakeParameter("@pais", pais), _ + ' db.MakeParameter("@postal", postal), db.MakeParameter("@e_mail", e_mail), db.MakeParameter("@usuario", usuario), _ + ' db.MakeParameter("@comen", comen), db.MakeParameter("@n_visitas", n_visitas), db.MakeParameter("@fecha_ini", fecha_ini), _ + ' db.MakeParameter("@fecha_ult", fecha_ult), db.MakeParameter("@fecha_alta", fecha_alta), db.MakeParameter("@autorizo", autorizo), _ + ' db.MakeParameter("@nivel", nivel), db.MakeParameter("@sec_origen", sec_origen), db.MakeParameter("@ocupacion", ocupacion), _ + ' db.MakeParameter("@cargo", cargo), db.MakeParameter("@conexion", conexion), db.MakeParameter("@passw", passw)}) + 'End Sub + + ' Public Shared Sub HabilitaTitulares(ByVal usuario As String) + + ' Dim db As New Database + ' db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clasi3") + ' db.RunProcedure("sp_habilita_titulares", New SqlParameter() {db.MakeParameter("@usuario", usuario)}) + ' End Sub + + ' Public Shared Sub DardebajaTitulares(ByVal usuario As String) + + ' Dim db As New Database + ' db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clasi3") + ' db.RunProcedure("sp_baja_titulares", New SqlParameter() {db.MakeParameter("@usuario", usuario)}) + ' End Sub + + + ' Public Shared Function AddUsu1(ByVal apellido As String, ByVal nombre As String, ByVal f_nac As Date, _ + 'ByVal direccion As String, ByVal localidad As String, ByVal provincia As String, ByVal pais As String, _ + 'ByVal postal As String, ByVal e_mail As String, ByVal usuario As String, ByVal comen As String, _ + 'ByVal n_visitas As Integer, ByVal fecha_ini As Date, ByVal fecha_ult As Date, _ + 'ByVal fecha_alta As Date, ByVal autorizo As Int16, ByVal nivel As Int16, ByVal sec_origen As Int16, _ + 'ByVal ocupacion As Int16, ByVal cargo As Int16, ByVal conexion As Int16, ByVal passw As String, _ + ' ByVal titulares As Integer) As Integer + ' Dim db As New Database + ' db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clasi3") + + ' Dim parameters() As SqlParameter = {db.MakeParameter("@ItemID", ParameterDirection.Output, 0), _ + ' db.MakeParameter("@apellido", apellido), _ + ' db.MakeParameter("@nombre", nombre), db.MakeParameter("@f_nac", f_nac), db.MakeParameter("@direccion", direccion), _ + ' db.MakeParameter("@localidad", localidad), db.MakeParameter("@provincia", provincia), db.MakeParameter("@pais", pais), _ + ' db.MakeParameter("@postal", postal), db.MakeParameter("@e_mail", e_mail), db.MakeParameter("@usuario", usuario), _ + ' db.MakeParameter("@comen", comen), db.MakeParameter("@n_visitas", n_visitas), db.MakeParameter("@fecha_ini", fecha_ini), _ + ' db.MakeParameter("@fecha_ult", fecha_ult), db.MakeParameter("@fecha_alta", fecha_alta), db.MakeParameter("@autorizo", autorizo), _ + ' db.MakeParameter("@nivel", nivel), db.MakeParameter("@sec_origen", sec_origen), db.MakeParameter("@ocupacion", ocupacion), _ + ' db.MakeParameter("@cargo", cargo), db.MakeParameter("@conexion", conexion), db.MakeParameter("@passw", passw), _ + ' db.MakeParameter("@titulares", titulares)} + + ' db.RunProcedure("sp_addusu1", parameters) + + ' AddUsu1 = CInt(parameters(0).Value) + ' End Function + + 'Public Shared Sub InsertaValores(ByVal valor As Integer) + ' Dim db As New Database + ' db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clasi3") + ' db.RunProcedure("sp_valores", New SqlParameter() {db.MakeParameter("@valor", valor)}) + 'End Sub + + Public Shared Function ConvertUTF(ByVal texto As String) As String + If texto.Length > 3 Then + texto = texto.Trim + If texto.Length > 0 Then + If StrReverse(texto).Chars(0) = "_" Then + If StrReverse(texto).Chars(1) = "_" Then + If StrReverse(texto).Chars(2) = "_" Then + texto = texto.Remove(texto.LastIndexOf("___"), 3) + Else + texto = texto.Remove(texto.LastIndexOf("__"), 2) + End If + Else + texto = texto.Remove(texto.LastIndexOf("_"), 1) + End If + End If + End If + If texto.Length > 0 Then + If StrReverse(texto).Chars(0) = "." And Not StrReverse(texto).Chars(1) = "." Then '' saco el punto final, si lo hay + texto = texto.Remove(texto.LastIndexOf("."), 1) + End If + End If + Else + texto = texto + End If + '' + texto = ExtendedHtmlUtility.HtmlEntityEncode(texto, True) '' funcin agregada en C# + Return texto + + End Function + + Public Shared Function Extrae_bold(ByVal tex As String) As String + 'tengo que devolver lo que est dentro de y , separado por
+ Dim n_posi1, n_posi2 As Integer + 'Dim str_aux As String + Dim str_b As New StringBuilder + + 'str_aux = "" + n_posi2 = 0 + + While tex.IndexOf("", n_posi2) >= 0 + n_posi1 = tex.IndexOf("", n_posi2) + ''n_posi1 = tex.IndexOf("", n_posi2) + If n_posi2 >= 0 Then 'hay bold + n_posi2 = tex.IndexOf("", n_posi1 + 3) + If n_posi2 < 0 Then + Exit While + End If + End If + If n_posi2 > n_posi1 Then + str_b.Append("- " + tex.Substring(n_posi1 + 3, n_posi2 - n_posi1 - 3) + "
") + End If + n_posi2 += 4 'largo de + End While + Return str_b.ToString + End Function + + Public Shared Function LeoAviso(ByVal id As Int64) As SqlDataReader + LeoAviso = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clientes") + db.RunProcedure("sp_leoaviso", New SqlParameter() {db.MakeParameter("@id", id)}, LeoAviso) + End Function + + Public Shared Function LeoUltimosAvisos(ByVal rubro As Integer) As SqlDataReader + LeoUltimosAvisos = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clientes") + db.RunProcedure("sp_leoultimosavisos", New SqlParameter() {db.MakeParameter("@rubro", rubro)}, LeoUltimosAvisos) + End Function + + Public Shared Function LeoRubros(ByVal rubro As Integer) As SqlDataReader + LeoRubros = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clientes") + db.RunProcedure("sp_leourubros", New SqlParameter() {db.MakeParameter("@rubro", rubro)}, LeoRubros) + End Function + Public Shared Function LeoRubros() As SqlDataReader + LeoRubros = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clientes") + db.RunProcedure("sp_leourubros", LeoRubros) + End Function + + Public Shared Function LeoUltimosAvisos() As SqlDataReader + LeoUltimosAvisos = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clientes") + db.RunProcedure("sp_leoultimosavisos", LeoUltimosAvisos) + End Function + Public Shared Function LeoAvisosInt(ByVal rubro As Integer, ByVal tipoav As Integer) As SqlDataReader + LeoAvisosInt = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clientes") + db.RunProcedure("sp_leoavisosint", New SqlParameter() {db.MakeParameter("@rubro", rubro), db.MakeParameter("@tipoav", tipoav)}, LeoAvisosInt) + End Function + Public Shared Function LeoAvisosInt(ByVal tipoav As Integer) As SqlDataReader + LeoAvisosInt = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clientes") + db.RunProcedure("sp_leoavisosint", New SqlParameter() {db.MakeParameter("@tipoav", tipoav)}, LeoAvisosInt) + End Function + Public Shared Function LeoRubrosInt(ByVal rubro As Integer, ByVal tipoav As Integer) As SqlDataReader + LeoRubrosInt = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clientes") + db.RunProcedure("sp_leourubrosint", New SqlParameter() {db.MakeParameter("@rubro", rubro), db.MakeParameter("@tipoav", tipoav)}, LeoRubrosInt) + End Function + Public Shared Function LeoRubrosInt(ByVal tipoav As Integer) As SqlDataReader + LeoRubrosInt = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_clientes") + db.RunProcedure("sp_leourubrosint", New SqlParameter() {db.MakeParameter("@tipoav", tipoav)}, LeoRubrosInt) + End Function + + Public Shared Function LeoUsuariosVip() As SqlDataReader + LeoUsuariosVip = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + db.RunProcedure("sp_usuarios_vip", LeoUsuariosVip) + End Function + + Public Shared Function LeoUsuariosIp() As SqlDataReader + LeoUsuariosIp = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + db.RunProcedure("sp_usuarios_ip", LeoUsuariosIp) + End Function + + + Public Shared Function ver_seccion(ByVal ids As Integer) As SqlDataReader + ver_seccion = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + db.RunProcedure("sp_ver_seccion", New SqlParameter() {db.MakeParameter("@ids", ids)}, ver_seccion) + End Function + + + Public Shared Function LeeSeccionesForos() As SqlDataReader + LeeSeccionesForos = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + db.RunProcedure("sp_lee_secciones_foros", LeeSeccionesForos) + End Function + + Public Shared Sub InsertaEstado(ByVal texto As String, ByVal id_origen As Int64) + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + db.RunProcedure("sp_insertar_estado", New SqlParameter() {db.MakeParameter("@texto", texto), db.MakeParameter("@id_origen", id_origen)}) + End Sub + + Public Shared Function LeeStatusAmigo(ByVal id_amigo As Int64) As SqlDataReader + LeeStatusAmigo = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + db.RunProcedure("sp_amigos_lee_status", New SqlParameter() {db.MakeParameter("@id_amigo", id_amigo)}, LeeStatusAmigo) + End Function + + Public Shared Function LeeDefensor() As SqlDataReader + LeeDefensor = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + db.RunProcedure("sp_lee_defensor", LeeDefensor) + End Function + + Public Shared Function LeeDefensorAmpliada(ByVal id As Integer) As SqlDataReader + LeeDefensorAmpliada = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + db.RunProcedure("sp_lee_defensor_ampliada", New SqlParameter() {db.MakeParameter("@id", id)}, LeeDefensorAmpliada) + End Function + + Public Shared Sub InsertaDenuncia(ByVal comentario As String, ByVal remitente As String) + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + db.RunProcedure("sp_ins_denuncia", New SqlParameter() {db.MakeParameter("@comentario", comentario), db.MakeParameter("@remitente", remitente)}) + End Sub + + Public Shared Sub InsertaInvitacionAmigo(ByVal id_origen As Int64, ByVal id_amigo As Int64) + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + db.RunProcedure("sp_ins_invita_amigo", New SqlParameter() {db.MakeParameter("@id_origen", id_origen), db.MakeParameter("@id_amigo", id_amigo)}) + End Sub + + Public Shared Function FechaHoraSql() As SqlDataReader + FechaHoraSql = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + db.RunProcedure("sp_fechahora", FechaHoraSql) + End Function + + Public Shared Function GetSearchWords(ByVal text As String) As String + text = text.Replace(",", " ").Replace("""", "") + Dim re As Regex = New Regex("[A-za-z�-9;,\.]{4,}") + ''Dim re As Regex = New Regex("\b(\w+)\b\s*\1\b") '' para buscar palabras repetidas + Dim matches As MatchCollection = re.Matches(text) + Dim words() As String = New String((matches.Count) - 1) {} + + Dim i As Integer = 0 + Dim j As Integer = 0 + Dim int_cuenta As Integer = matches.Count + Do While (i < int_cuenta) + Dim str_match1 As String = matches(i).Value.TrimEnd.TrimStart.Replace(",", "").Replace(".", "") + i += 1 + Loop + i = 0 + Do While (i < int_cuenta) + Dim str_match As String = matches(j).Value.TrimEnd.TrimStart.Replace(",", "").Replace(".", "") + Array.Sort(words) + If Array.BinarySearch(words, str_match) >= 0 Then + int_cuenta -= 1 + Else + words(0) = str_match '' el sort siempre coloca arriba a nothing + i += 1 + End If + j += 1 + Loop + Dim str_palabra_clave, str_retorno As String + str_retorno = "" + For Each str_palabra_clave In words + If Not str_palabra_clave Is Nothing Then + str_retorno += str_palabra_clave + "," + End If + Next + Return str_retorno + End Function + + Public Shared Function resumen(ByVal texto As String, ByVal id As Integer, ByVal mayusculas As Boolean, ByVal str_vinculo As String, ByVal str_ancho As String, _ + ByVal str_alto As String, ByVal int_limite As Integer, ByVal str_yes_no As String) As String + Dim n_pos As Integer + If texto <> "" Then + 'me fijo si est todo en maysculas: + If mayusculas Then + If texto.Substring(0, 3) = texto.Substring(0, 3).ToUpper Then + texto = texto.ToLower + texto = texto.Chars(0).ToString.ToUpper + texto.Remove(0, 1) '' la primera con mayscula + End If + End If + + If texto.Length > int_limite Then + texto = texto.Substring(0, int_limite) + n_pos = texto.LastIndexOf(" ") + If n_pos > 0 Then + Return texto.Substring(0, n_pos) + "... (ampliar)" + Else + Return texto + End If + Else + Return texto + End If + Else + Return texto + End If + + End Function + + Public Shared Function InsertaAgenda(ByVal genero As Int32, ByVal evento As String, ByVal fecha As Date, ByVal horario As String, ByVal lugar As String, _ + ByVal direccion As String, ByVal detalles As String, ByVal gratuito As Boolean, ByVal telefono As String, ByVal n_id As String) As Int64 + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + + Dim parameters() As SqlParameter = {db.MakeParameter("@id", ParameterDirection.Output, 0), db.MakeParameter("@genero", genero), db.MakeParameter("@evento", evento), _ + db.MakeParameter("@fecha", fecha), db.MakeParameter("@horario", horario), db.MakeParameter("@lugar", lugar), db.MakeParameter("@direccion", direccion), _ + db.MakeParameter("@detalles", detalles), db.MakeParameter("@gratuito", gratuito), db.MakeParameter("@telefono", telefono), db.MakeParameter("@n_id", n_id)} + + db.RunProcedure("sp_insertaagenda", parameters) + + InsertaAgenda = CInt(parameters(0).Value) + + End Function + + Public Shared Function veridevento(ByVal idtablero As Integer) As SqlDataReader + veridevento = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_tablero") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_veridevento", New SqlParameter() {db.MakeParameter("@idtablero", idtablero)}, veridevento) + End Function + + Public Shared Function muestrafutbol(ByVal eventid As Integer) As SqlDataReader + muestrafutbol = Nothing + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_tablero") + Dim DReader As SqlDataReader = Nothing + db.RunProcedure("sp_futbol_muestra", New SqlParameter() {db.MakeParameter("@eventid", eventid)}, muestrafutbol) + End Function + + + Public Shared Function HabilitaOpiniones(ByVal idNoticia As Int64, ByVal ori As Integer) As Boolean + Dim db As New Database + Return db.RunProcBool("sp_HabilitaOpiniones", New SqlParameter() {db.MakeParameter("@idNoticia", idNoticia), db.MakeParameter("@ori", ori)}) + End Function + + Public Shared Function ChequeaFotosExtras(ByVal idNoticia As Int64) As Boolean + Dim db As New Database + Return db.RunProcBool("sp_ChequeaFotosExtras", New SqlParameter() {db.MakeParameter("@idNoticia", idNoticia)}) + End Function + + Public Shared Function BuscaTitulosExternos(ByVal id_seccion As Integer) As String + Dim db As New Database + Return db.RunProcstring("sp_BuscaTitulosExternos", New SqlParameter() {db.MakeParameter("@id_seccion", id_seccion)}) + End Function + + Public Shared Function DevuelveIdTexto(ByVal idnoticia As Long) As Integer + Dim db As New Database + db.ConString = System.Configuration.ConfigurationManager.AppSettings("con_ed1") + Dim DReader As SqlDataReader = Nothing + Return db.RunProcedure("sp_DevuelveIdTexto", New SqlParameter() {db.MakeParameter("@idnoticia", idnoticia)}) + End Function +End Class diff --git a/Funebres/estilos.css b/Funebres/estilos.css new file mode 100644 index 0000000..b40e402 --- /dev/null +++ b/Funebres/estilos.css @@ -0,0 +1,108 @@ +* { + margin: 0; +} + +a { + text-decoration: none; +} + +.flex-wrap { + flex-wrap: wrap; +} +.flex { + display: flex; +} +.px2 { + padding-left: 1rem; + padding-right: 1rem; +} +.block-title { + font-family: arial,helvetica,sans-serif; + font-size: 1.15em; + letter-spacing: .9px; + border-bottom: 4px solid #efefef; +} + +.block-title span { + border-bottom: 4px solid #028fbe; + display: inline-block; + margin: 0 0 -4px; + padding-bottom: 16px; +} + +.mb1_5 { + margin-bottom: 1.5rem; +} +.col-12 { + width: 100%; +} + +.carousel { + overflow-x: auto; + scrollbar-width: none; + } + +.list-reset { + padding-left: 0; +} + +.funebre-ad { + display: flex; + padding-right: 1.5rem; +} + +.funebre-icon { + padding-right: 1rem; +} + +.funebre-content { + width: 150px; +} + +.funebre-content h5 { + font-size: 0.94em; + font-family: arial,helvetica,sans-serif; + color: #5d5d5d; +} + +.funebre-content h2 { + font-family: arial,helvetica,sans-serif; + font-size: 1.15em; + padding: .3rem 0; +} +.funebre-content h2 a, .block-title a { + color: #028fbe; +} + +.funebre-content p { + font-family: arial,helvetica,sans-serif; +} + +.button { + background: #028fbe; + color: #fff; + border-radius: 3px; + text-transform: uppercase; + font-family: arial,helvetica,sans-serif; + font-size: 11px; + letter-spacing: .6px; + padding: .75rem 1rem; + cursor: pointer; +} + +.pt2 { + padding-top: 1rem; +} + +@media (min-width:360px){ + .funebre-ad {display: flow-root} + } +@media (min-width:412px){ + .funebre-ad {padding-right:2.5rem} + } +@media (min-width:768px){ + .funebre-ad {padding-right:2.5rem} + } +@media (min-width:992px){ + .carousel{max-width:950px} + } \ No newline at end of file diff --git a/Funebres/funebre.html b/Funebres/funebre.html new file mode 100644 index 0000000..283e88d --- /dev/null +++ b/Funebres/funebre.html @@ -0,0 +1,101 @@ + + + + + + + + +
+ + + + + + +
+ + + \ No newline at end of file diff --git a/Global.asax b/Global.asax new file mode 100644 index 0000000..a83923b --- /dev/null +++ b/Global.asax @@ -0,0 +1,28 @@ +<%@ Application Language="VB" %> + + \ No newline at end of file diff --git a/Recetas.aspx b/Recetas.aspx new file mode 100644 index 0000000..7a80dca --- /dev/null +++ b/Recetas.aspx @@ -0,0 +1,119 @@ +<%@ Page Title="Página principal" Language="VB" AutoEventWireup="false" + CodeFile="Recetas.aspx.vb" Inherits="_Recetas" %> + + + + + + + + + Page 5 + + + + + + + + + + + + + + + + + + + + +
+
+

We bake fresh, handmade bread, pastries and cakes every day

+
+
+
+
+
+
+
+
+
+
+

Sourdough Loaf

+

Sample text, consectetur adipiscing.

+
$​4.65
+
+
+
+
+
+
+
+

Baguette

+

Small-batch sourdough baguette.

+
$​3.05
+
+
+
+
+
+
+
+
+

Farmers Loaf

+

Slow-fermented sourdough Rye studded with Kalamata.

+
$​5.50
+
+
+
+
+
+
+
+

Round Bread

+

Made with 100% whole grain flour and high in fiber.

+
$​5.15
+
+
+
+
+
+
+
+
+
+
+

Images from Freepik +

+
+
+ + + + + + + + diff --git a/Recetas.aspx.vb b/Recetas.aspx.vb new file mode 100644 index 0000000..3a58b83 --- /dev/null +++ b/Recetas.aspx.vb @@ -0,0 +1,5 @@ + +Partial Class _Recetas + Inherits System.Web.UI.Page + +End Class diff --git a/Scripts/jquery-1.4.1-vsdoc.js b/Scripts/jquery-1.4.1-vsdoc.js new file mode 100644 index 0000000..52ea342 --- /dev/null +++ b/Scripts/jquery-1.4.1-vsdoc.js @@ -0,0 +1,8061 @@ +/* + * This file has been commented to support Visual Studio Intellisense. + * You should not use this file at runtime inside the browser--it is only + * intended to be used only for design-time IntelliSense. Please use the + * standard jQuery library for all production use. + * + * Comment version: 1.4.1a + */ + +/*! + * jQuery JavaScript Library v1.4.1 + * http://jquery.com/ + * + * Distributed in whole under the terms of the MIT + * + * Copyright 2010, John Resig + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Jan 25 19:43:33 2010 -0500 + */ + +(function( window, undefined ) { + +// Define a local copy of jQuery +var jQuery = function( selector, context ) { + /// + /// 1: $(expression, context): esta función acepta una cadena que contiene un selector CSS usado para buscar coincidencias de un conjunto de elementos. + /// 2: $(html): crea elementos DOM sobre la marcha a partir de la cadena de HTML puro proporcionada. + /// 3: $(elements): encapsula la funcionalidad de jQuery en torno a uno o varios elementos DOM. + /// 4: $(callback): método abreviado de $(document).ready(). + /// 5: $() - A partir de jQuery 1.4, si no pasa argumentos al método jQuery(), se devuelve un conjunto jQuery vacío. + /// + /// + /// 1: expression - An expression to search with. + /// 2: html: cadena de HTML que se crea sobre la marcha. + /// 3: elements: elementos DOM que va a encapsular un objeto jQuery. + /// 4: callback: función que se ejecuta cuando el DOM está listo. + /// + /// + /// 1: contexto: elemento DOM, documento o jQuery que se usa como contexto. + /// + /// + + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context ); + }, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + + // A central reference to the root jQuery(document) + rootjQuery, + + // A simple way to check for HTML strings or ID strings + // (both of which we optimize for) + quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/, + + // Is it a simple selector + isSimple = /^.[^:#\[\.,]*$/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // Has the ready events already been bound? + readyBound = false, + + // The functions to execute on DOM ready + readyList = [], + + // The ready event handler + DOMContentLoaded, + + // Save a reference to some core methods + toString = Object.prototype.toString, + hasOwnProperty = Object.prototype.hasOwnProperty, + push = Array.prototype.push, + slice = Array.prototype.slice, + indexOf = Array.prototype.indexOf; + +jQuery.fn = jQuery.prototype = { + init: function( selector, context ) { + + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + match = quickExpr.exec( selector ); + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + doc = (context ? context.ownerDocument || context : document); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec( selector ); + + if ( ret ) { + if ( jQuery.isPlainObject( context ) ) { + selector = [ document.createElement( ret[1] ) ]; + jQuery.fn.attr.call( selector, context, true ); + + } else { + selector = [ doc.createElement( ret[1] ) ]; + } + + } else { + ret = buildFragment( [ match[1] ], [ doc ] ); + selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes; + } + + // HANDLE: $("#id") + } else { + elem = document.getElementById( match[2] ); + + if ( elem ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $("TAG") + } else if ( !context && /^\w+$/.test( selector ) ) { + this.selector = selector; + this.context = document; + selector = document.getElementsByTagName( selector ); + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return (context || rootjQuery).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return jQuery( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if (selector.selector !== undefined) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.isArray( selector ) ? + this.setArray( selector ) : + jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.4.1", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + /// + /// Número de elementos que coinciden actualmente. + /// Parte del núcleo + /// + /// + + return this.length; + }, + + toArray: function() { + /// + /// Recuperar todos los elementos DOM contenidos en el conjunto jQuery, como una matriz. + /// + /// + return slice.call( this, 0 ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + /// + /// El acceso a un único número de elemento coincidente sirve para tener acceso al + /// elemento n coincidente. + /// Parte del núcleo + /// + /// + /// + /// Tener acceso al elemento en la posición n. + /// + + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this.slice(num)[ 0 ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + /// + /// Establecer el objeto jQuery en una matriz de elementos y, al mismo tiempo, mantener + /// la pila. + /// Parte del núcleo + /// + /// + /// + /// Matriz de elementos + /// + + // Build a new jQuery matched element set + var ret = jQuery( elems || null ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + (this.selector ? " " : "") + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Force the current matched set of elements to become + // the specified array of elements (destroying the stack in the process) + // You should use pushStack() in order to do this, but maintain the stack + setArray: function( elems ) { + /// + /// Establecer el objeto jQuery en una matriz de elementos. Esta operación es + /// completamente destructiva: asegúrese de usar .pushStack() si desea mantener + /// la pila de jQuery. + /// Parte del núcleo + /// + /// + /// + /// Matriz de elementos + /// + + // Resetting the length to 0, then using the native Array push + // is a super-fast way to populate an object with array-like properties + this.length = 0; + push.apply( this, elems ); + + return this; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + /// + /// Ejecutar una función en el contento de cada elemento coincidente. + /// Esto significa que cada vez que se ejecuta la función pasada + /// (una vez para cada elemento coincidente), la palabra clave "this" + /// apunta al elemento específico. + /// Asimismo, la función, cuando se ejecuta, toma un único + /// argumento que representa la posición del elemento en el conjunto de + /// elementos coincidentes. + /// Parte del núcleo + /// + /// + /// + /// Función que se va a ejecutar + /// + + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + /// + /// Enlaza una función que se ejecuta cuando el DOM está preparado para ser atravesado y manipulado. + /// + /// La función que se ejecuta cuando el DOM está preparado. + + // Attach the listeners + jQuery.bindReady(); + + // If the DOM is already ready + if ( jQuery.isReady ) { + // Execute the function immediately + fn.call( document, jQuery ); + + // Otherwise, remember the function for later + } else if ( readyList ) { + // Add the function to the wait list + readyList.push( fn ); + } + + return this; + }, + + eq: function( i ) { + /// + /// Reducir el conjunto de elementos coincidentes a un único elemento. + /// Posición del elemento en el conjunto de elementos coincidentes + /// empieza en 0 y llega hasta la longitud - 1. + /// Parte del núcleo + /// + /// + /// + /// pos Índice del elemento en el que se desea establecer el límite. + /// + + return i === -1 ? + this.slice( i ) : + this.slice( i, +i + 1 ); + }, + + first: function() { + /// + /// Reducir el conjunto de elementos coincidentes al primero del conjunto. + /// + /// + + return this.eq( 0 ); + }, + + last: function() { + /// + /// Reducir el conjunto de elementos coincidentes al último del conjunto. + /// + /// + + return this.eq( -1 ); + }, + + slice: function() { + /// + /// Selecciona un subconjunto de elementos coincidentes. Se comporta exactamente igual que el método de segmentación de matriz integrado. + /// + /// Lugar en el que comienza el subconjunto (en base 0). + /// Lugar en el que termina el subconjunto (sin incluir al propio elemento de finalización). + /// Si se omite, termina al final de la selección + /// Elementos segmentados + + return this.pushStack( slice.apply( this, arguments ), + "slice", slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + /// + /// Este miembro es interno. + /// + /// + /// + + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + /// + /// Terminar la última operación "destructiva", lo que revierte la lista de elementos coincidentes + /// a su estado anterior. Después de una operación de terminación, la lista de elementos coincidentes se + /// revertirá al último estado que tenían dichos elementos. + /// Si no se produjo previamente ninguna operación destructiva, se devuelve un conjunto vacío. + /// Parte de DOM/Traversing + /// + /// + + return this.prevObject || jQuery(null); + }, + + // Solo para uso interno. + // Se comporta como un método de matriz y no como un método de jQuery. + push: push, + sort: [].sort, + splice: [].splice +}; + +// Asignar la función init al prototipo de jQuery para crear posteriormente una instancia +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + /// + /// Extiende un objeto con uno o varios objetos y devuelve el objeto + /// original modificado. Esto es muy útil para la herencia simple. + /// jQuery.extend(settings, options); + /// var settings = jQuery.extend({}, defaults, options); + /// Parte de JavaScript + /// + /// + /// Objeto que se va a extender + /// + /// + /// Objeto que se combinará en el primero. + /// + /// + /// (opcional) Otros objetos que se van a combinar en el primero + /// + /// + + // copy reference to target object + var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging object literal values or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) { + var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src + : jQuery.isArray(copy) ? [] : {}; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + /// + /// Ejecutar esta función para devolver el control de la variable $ + /// a la biblioteca que la implementó, cualquiera que sea. Esto sirve para asegurarnos + /// de que jQuery no entra en conflicto con el objeto $ + /// de otras bibliotecas. + /// Mediante esta función, solo tenemos acceso a jQuery + /// a través de la variable 'jQuery'. Por ejemplo, donde se solía usar + /// $("div p"), ahora se debe usar jQuery("div p"). + /// Parte del núcleo + /// + /// + + window.$ = _$; + + if ( deep ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // ¿Está DOM listo para usarlo? Establecer en true una vez que tenga lugar. + isReady: false, + + // Controlar cuándo el DOM está preparado + ready: function() { + /// + /// Este método es interno. + /// + /// + + // Make sure that the DOM is not already loaded + if ( !jQuery.isReady ) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 13 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If there are functions bound, to execute + if ( readyList ) { + // Execute all of them + var fn, i = 0; + while ( (fn = readyList[ i++ ]) ) { + fn.call( document, jQuery ); + } + + // Reset the list of functions + readyList = null; + } + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyBound ) { + return; + } + + readyBound = true; + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if ( document.readyState === "complete" ) { + return jQuery.ready(); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent("onreadystatechange", DOMContentLoaded); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( document.documentElement.doScroll && toplevel ) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + /// + /// Determina si el parámetro pasado es una función. + /// + /// Objeto que se va a comprobar + /// Devuelve True si el parámetro es una función; de lo contrario, devuelve false. + + return toString.call(obj) === "[object Function]"; + }, + + isArray: function( obj ) { + /// + /// Determinar si el parámetro pasado es una matriz. + /// + /// Objeto del que se va a determinar si es una matriz o no. + /// Devuelve True si el parámetro es una función; de lo contrario, devuelve false. + + return toString.call(obj) === "[object Array]"; + }, + + isPlainObject: function( obj ) { + /// + /// Comprobar si el objeto es un objeto simple (creado con "{}" o "new Object"). + /// + /// + /// Objeto que se comprobará para ver si es un objeto simple. + /// + /// + + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) { + return false; + } + + // Not own constructor property must be Object + if ( obj.constructor + && !hasOwnProperty.call(obj, "constructor") + && !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || hasOwnProperty.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + /// + /// Comprobar si un objeto está vacío (no contiene propiedades). + /// + /// + /// Objeto que se comprobará para ver si está vacío. + /// + /// + + for ( var name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw msg; + }, + + parseJSON: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@") + .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]") + .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) { + + // Try to use the native JSON parser first + return window.JSON && window.JSON.parse ? + window.JSON.parse( data ) : + (new Function("return " + data))(); + + } else { + jQuery.error( "Invalid JSON: " + data ); + } + }, + + noop: function() { + /// + /// Función vacía. + /// + /// + }, + + // Evalúa un script en un contexto global + globalEval: function( data ) { + /// + /// Evalúa internamente un script en un contexto global. + /// + /// + + if ( data && rnotwhite.test(data) ) { + // Inspired by code by Andrea Giammarchi + // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html + var head = document.getElementsByTagName("head")[0] || document.documentElement, + script = document.createElement("script"); + + script.type = "text/javascript"; + + if ( jQuery.support.scriptEval ) { + script.appendChild( document.createTextNode( data ) ); + } else { + script.text = data; + } + + // Use insertBefore instead of appendChild to circumvent an IE6 bug. + // This arises when a base node is used (#2709). + head.insertBefore( script, head.firstChild ); + head.removeChild( script ); + } + }, + + nodeName: function( elem, name ) { + /// + /// Comprueba si el elemento especificado tiene el nombre de nodo de DOM especificado. + /// + /// Elemento que se va a examinar + /// Nombre de nodo que se va a comprobar + /// Devuelve true si el nombre de nodo especificado coincide con el nombre DOM del nodo; de lo contrario, devuelve false + + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + /// + /// Función de iterador genérica que se puede usar para recorrer en iteración + /// objetos y matrices. Esta función no es la misma que + /// $().each(), que se usa exclusivamente para recorrer en iteración un objeto + /// jQuery. Esta función se puede usar para recorrer en iteración cualquier elemento. + /// La devolución de llamada tiene dos argumentos: la clave (objetos) o índice (matrices) es el primero + /// y el valor es el segundo. + /// Parte de JavaScript + /// + /// + /// Objeto o matriz que se va a recorrer en iteración. + /// + /// + /// Función que se va a ejecutar en cada objeto. + /// + /// + + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction(object); + + if ( args ) { + if ( isObj ) { + for ( name in object ) { + if ( callback.apply( object[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( object[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in object ) { + if ( callback.call( object[ name ], name, object[ name ] ) === false ) { + break; + } + } + } else { + for ( var value = object[0]; + i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {} + } + } + + return object; + }, + + trim: function( text ) { + /// + /// Quitar el espacio en blanco del principio y el final de una cadena. + /// Parte de JavaScript + /// + /// + /// + /// Cadena que se va a recortar. + /// + + return (text || "").replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( array, results ) { + /// + /// Devuelve cualquier elemento en una matriz verdadera. Es un método interno. + /// + /// Elemento que se va a convertir en una matriz real + /// + /// + + var ret = results || []; + + if ( array != null ) { + // The window, strings (and functions) also have 'length' + // The extra typeof function check is to prevent crashes + // in Safari 2 (See: #3039) + if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) { + push.call( ret, array ); + } else { + jQuery.merge( ret, array ); + } + } + + return ret; + }, + + inArray: function( elem, array ) { + if ( array.indexOf ) { + return array.indexOf( elem ); + } + + for ( var i = 0, length = array.length; i < length; i++ ) { + if ( array[ i ] === elem ) { + return i; + } + } + + return -1; + }, + + merge: function( first, second ) { + /// + /// Combinar dos matrices y quitar todos los duplicados. + /// La nueva matriz está formada por todos los resultados de la primera matriz seguidos de + /// los resultados distintos de la segunda matriz. + /// Parte de JavaScript + /// + /// + /// + /// Primera matriz que se va a combinar. + /// + /// + /// Segunda matriz que se va a combinar. + /// + + var i = first.length, j = 0; + + if ( typeof second.length === "number" ) { + for ( var l = second.length; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + /// + /// Filtrar los elementos de una matriz mediante una función de filtro. + /// La función especificada pasará dos argumentos: el + /// elemento de matriz actual y el índice del elemento de la matriz. La + /// función debe devolver 'true' para mantener el elemento en la matriz + /// y false para quitarlo. + /// }); + /// Parte de JavaScript + /// + /// + /// + /// matriz La matriz en la que se van a buscar elementos. + /// + /// + /// Función que se procesa en cada elemento. + /// + /// + /// Invertir la selección: seleccionar el opuesto de la función. + /// + + var ret = []; + + // Go through the array, only saving the items + // that pass the validator function + for ( var i = 0, length = elems.length; i < length; i++ ) { + if ( !inv !== !callback( elems[ i ], i ) ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + /// + /// Convertir todos los elementos de una matriz en otra matriz de elementos. + /// La función de conversión proporcionada a este método se + /// llama para cada elemento de la matriz y se le pasa un argumento: + /// Elemento que se va a convertir. + /// La función puede devolver entonces el valor convertido, 'null' + /// (para quitar el elemento) o una matriz de valores, que se acoplarán + /// en la matriz completa. + /// Parte de JavaScript + /// + /// + /// + /// matriz La matriz que se va a convertir. + /// + /// + /// Función que se procesa en cada elemento. + /// + + var ret = [], value; + + // Atravesar la matriz y convertir cada elemento en su + // nuevo valor o valores. + for ( var i = 0, length = elems.length; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + return ret.concat.apply( [], ret ); + }, + + // Contador de GUID global para objetos + guid: 1, + + proxy: function( fn, proxy, thisObject ) { + /// + /// Toma una función y devuelve una nueva que tendrá siempre un ámbito particular. + /// + /// + /// Función cuyo ámbito se cambiará. + /// + /// + /// Objeto en el que se debe establecer el ámbito de la función. + /// + /// + + if ( arguments.length === 2 ) { + if ( typeof proxy === "string" ) { + thisObject = fn; + fn = thisObject[ proxy ]; + proxy = undefined; + + } else if ( proxy && !jQuery.isFunction( proxy ) ) { + thisObject = proxy; + proxy = undefined; + } + } + + if ( !proxy && fn ) { + proxy = function() { + return fn.apply( thisObject || this, arguments ); + }; + } + + // Set the guid of unique handler to the same of original handler, so it can be removed + if ( fn ) { + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + } + + // So proxy can be declared as an argument + return proxy; + }, + + // Use of jQuery.browser is frowned upon. + // More details: http://docs.jquery.com/Utilities/jQuery.browser + uaMatch: function( ua ) { + ua = ua.toLowerCase(); + + var match = /(webkit)[ \/]([\w.]+)/.exec( ua ) || + /(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) || + /(msie) ([\w.]+)/.exec( ua ) || + !/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }, + + browser: {} +}); + +browserMatch = jQuery.uaMatch( userAgent ); +if ( browserMatch.browser ) { + jQuery.browser[ browserMatch.browser ] = true; + jQuery.browser.version = browserMatch.version; +} + +// Deprecated, use jQuery.browser.webkit instead +if ( jQuery.browser.webkit ) { + jQuery.browser.safari = true; +} + +if ( indexOf ) { + jQuery.inArray = function( elem, array ) { + /// + /// Determina el índice del primer parámetro de la matriz. + /// + /// Valor cuya existencia en la matriz se va a comprobar. + /// Matriz que se va a examinar para buscar el valor + /// Índice de base 0 del elemento si se encuentra; de lo contrario, -1. + + return indexOf.call( array, elem ); + }; +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); + +// Cleanup functions for the document ready method +if ( document.addEventListener ) { + DOMContentLoaded = function() { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + }; + +} else if ( document.attachEvent ) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }; +} + +// The DOM ready check for Internet Explorer +function doScrollCheck() { + if ( jQuery.isReady ) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch( error ) { + setTimeout( doScrollCheck, 1 ); + return; + } + + // and execute any waiting functions + jQuery.ready(); +} + +function evalScript( i, elem ) { + /// + /// Este método es interno. + /// + /// + + if ( elem.src ) { + jQuery.ajax({ + url: elem.src, + async: false, + dataType: "script" + }); + } else { + jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); + } + + if ( elem.parentNode ) { + elem.parentNode.removeChild( elem ); + } +} + +// Mutifunctional method to get and set values to a collection +// The value/s can be optionally by executed if its a function +function access( elems, key, value, exec, fn, pass ) { + var length = elems.length; + + // Setting many attributes + if ( typeof key === "object" ) { + for ( var k in key ) { + access( elems, k, key[k], exec, fn, value ); + } + return elems; + } + + // Setting one attribute + if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = !pass && exec && jQuery.isFunction(value); + + for ( var i = 0; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + + return elems; + } + + // Getting an attribute + return length ? fn( elems[0], key ) : null; +} + +function now() { + /// + /// Obtiene la fecha actual. + /// + /// La fecha actual. + + return (new Date).getTime(); +} + +// [vsdoc] The following function has been modified for IntelliSense. +// [vsdoc] Stubbing support properties to "false" for IntelliSense compat. +(function() { + + jQuery.support = {}; + + // var root = document.documentElement, + // script = document.createElement("script"), + // div = document.createElement("div"), + // id = "script" + now(); + + // div.style.display = "none"; + // div.innerHTML = "
a"; + + // var all = div.getElementsByTagName("*"), + // a = div.getElementsByTagName("a")[0]; + + // // Can't get basic test support + // if ( !all || !all.length || !a ) { + // return; + // } + + jQuery.support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: false, + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: false, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: false, + + // Get the style information from getAttribute + // (IE uses .cssText insted) + style: false, + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: false, + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: false, + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: false, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: false, + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: false, + + // Will be defined later + checkClone: false, + scriptEval: false, + noCloneEvent: false, + boxModel: false + }; + + // script.type = "text/javascript"; + // try { + // script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); + // } catch(e) {} + + // root.insertBefore( script, root.firstChild ); + + // // Make sure that the execution of code works by injecting a script + // // tag with appendChild/createTextNode + // // (IE doesn't support this, fails, and uses .text instead) + // if ( window[ id ] ) { + // jQuery.support.scriptEval = true; + // delete window[ id ]; + // } + + // root.removeChild( script ); + + // if ( div.attachEvent && div.fireEvent ) { + // div.attachEvent("onclick", function click() { + // // Cloning a node shouldn't copy over any + // // bound event handlers (IE does this) + // jQuery.support.noCloneEvent = false; + // div.detachEvent("onclick", click); + // }); + // div.cloneNode(true).fireEvent("onclick"); + // } + + // div = document.createElement("div"); + // div.innerHTML = ""; + + // var fragment = document.createDocumentFragment(); + // fragment.appendChild( div.firstChild ); + + // // WebKit doesn't clone checked state correctly in fragments + // jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked; + + // // Figure out if the W3C box model works as expected + // // document.body must exist before we can do this + // jQuery(function() { + // var div = document.createElement("div"); + // div.style.width = div.style.paddingLeft = "1px"; + + // document.body.appendChild( div ); + // jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; + // document.body.removeChild( div ).style.display = 'none'; + // div = null; + // }); + + // // Technique from Juriy Zaytsev + // // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ + // var eventSupported = function( eventName ) { + // var el = document.createElement("div"); + // eventName = "on" + eventName; + + // var isSupported = (eventName in el); + // if ( !isSupported ) { + // el.setAttribute(eventName, "return;"); + // isSupported = typeof el[eventName] === "function"; + // } + // el = null; + + // return isSupported; + // }; + + jQuery.support.submitBubbles = false; + jQuery.support.changeBubbles = false; + + // // release memory in IE + // root = script = div = all = a = null; +})(); + +jQuery.props = { + "for": "htmlFor", + "class": "className", + readonly: "readOnly", + maxlength: "maxLength", + cellspacing: "cellSpacing", + rowspan: "rowSpan", + colspan: "colSpan", + tabindex: "tabIndex", + usemap: "useMap", + frameborder: "frameBorder" +}; +var expando = "jQuery" + now(), uuid = 0, windowData = {}; +var emptyObject = {}; + +jQuery.extend({ + cache: {}, + + expando:expando, + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + "object": true, + "applet": true + }, + + data: function( elem, name, data ) { + /// + /// Almacenar datos arbitrarios asociados con el elemento especificado. + /// + /// + /// Elemento DOM para asociar con los datos. + /// + /// + /// Cadena que da nombre a los datos que se van a establecer. + /// + /// + /// Nuevo valor de datos. + /// + /// + + if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { + return; + } + + elem = elem == window ? + windowData : + elem; + + var id = elem[ expando ], cache = jQuery.cache, thisCache; + + // Handle the case where there's no name immediately + if ( !name && !id ) { + return null; + } + + // Compute a unique ID for the element + if ( !id ) { + id = ++uuid; + } + + // Avoid generating a new cache unless none exists and we + // want to manipulate it. + if ( typeof name === "object" ) { + elem[ expando ] = id; + thisCache = cache[ id ] = jQuery.extend(true, {}, name); + } else if ( cache[ id ] ) { + thisCache = cache[ id ]; + } else if ( typeof data === "undefined" ) { + thisCache = emptyObject; + } else { + thisCache = cache[ id ] = {}; + } + + // Prevent overriding the named cache with undefined values + if ( data !== undefined ) { + elem[ expando ] = id; + thisCache[ name ] = data; + } + + return typeof name === "string" ? thisCache[ name ] : thisCache; + }, + + removeData: function( elem, name ) { + if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { + return; + } + + elem = elem == window ? + windowData : + elem; + + var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ]; + + // If we want to remove a specific section of the element's data + if ( name ) { + if ( thisCache ) { + // Remove the section of cache data + delete thisCache[ name ]; + + // If we've removed all the data, remove the element's cache + if ( jQuery.isEmptyObject(thisCache) ) { + jQuery.removeData( elem ); + } + } + + // Otherwise, we want to remove all of the element's data + } else { + // Clean up the element expando + try { + delete elem[ expando ]; + } catch( e ) { + // IE has trouble directly removing the expando + // but it's ok with using removeAttribute + if ( elem.removeAttribute ) { + elem.removeAttribute( expando ); + } + } + + // Completely remove the data cache + delete cache[ id ]; + } + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + /// + /// Almacenar los datos arbitrarios asociados con los elementos coincidentes. + /// + /// + /// Cadena que da nombre a los datos que se van a establecer. + /// + /// + /// Nuevo valor de datos. + /// + /// + + if ( typeof key === "undefined" && this.length ) { + return jQuery.data( this[0] ); + + } else if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + var parts = key.split("."); + parts[1] = parts[1] ? "." + parts[1] : ""; + + if ( value === undefined ) { + var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); + + if ( data === undefined && this.length ) { + data = jQuery.data( this[0], key ); + } + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } else { + return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() { + jQuery.data( this, key, value ); + }); + } + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); +jQuery.extend({ + queue: function( elem, type, data ) { + if ( !elem ) { + return; + } + + type = (type || "fx") + "queue"; + var q = jQuery.data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( !data ) { + return q || []; + } + + if ( !q || jQuery.isArray(data) ) { + q = jQuery.data( elem, type, jQuery.makeArray(data) ); + + } else { + q.push( data ); + } + + return q; + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), fn = queue.shift(); + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift("inprogress"); + } + + fn.call(elem, function() { + jQuery.dequeue(elem, type); + }); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + /// + /// 1: queue(): devuelve una referencia a la cola del primer elemento (que es una matriz de funciones). + /// 2: queue(callback): agrega una nueva función que se ejecuta al final de la cola de todos los elementos coincidentes. + /// 3: queue(queue): reemplaza la cola de todos los elementos coincidentes por la nueva cola (la matriz de funciones). + /// + /// Función que se agrega a la cola. + /// + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + } + + if ( data === undefined ) { + return jQuery.queue( this[0], type ); + } + return this.each(function( i, elem ) { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + /// + /// Quita una función puesta en cola de delante de la cola y la ejecuta. + /// + /// Tipo de cola a la que obtener acceso. + /// + + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + /// + /// Establecer un temporizador para retrasar la ejecución de los elementos siguientes en la cola. + /// + /// + /// Entero que indica el número de milisegundos para retrasar la ejecución del siguiente elemento de la cola. + /// + /// + /// Cadena que contiene el nombre de la cola. El valor predeterminado es fx, la cola de efectos estándar. + /// + /// + + time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; + type = type || "fx"; + + return this.queue( type, function() { + var elem = this; + setTimeout(function() { + jQuery.dequeue( elem, type ); + }, time ); + }); + }, + + clearQueue: function( type ) { + /// + /// Quitar de la cola todos los elementos que no se han ejecutado aún. + /// + /// + /// Cadena que contiene el nombre de la cola. El valor predeterminado es fx, la cola de efectos estándar. + /// + /// + + return this.queue( type || "fx", [] ); + } +}); +var rclass = /[\n\t]/g, + rspace = /\s+/, + rreturn = /\r/g, + rspecialurl = /href|src|style/, + rtype = /(button|input)/i, + rfocusable = /(button|input|object|select|textarea)/i, + rclickable = /^(a|area)$/i, + rradiocheck = /radio|checkbox/; + +jQuery.fn.extend({ + attr: function( name, value ) { + /// + /// Establecer una única propiedad en un valor calculado en todos los elementos coincidentes. + /// En lugar de un valor, se proporciona una función que calcula el valor. + /// Parte de DOM/Attributes + /// + /// + /// + /// Nombre de la propiedad que se va a establecer. + /// + /// + /// Función que devuelve el valor que se va a establecer. + /// + + return access( this, name, value, true, jQuery.attr ); + }, + + removeAttr: function( name, fn ) { + /// + /// Quitar un atributo de cada uno de los elementos coincidentes. + /// Parte de DOM/Attributes + /// + /// + /// Atributo para quitar. + /// + /// + + return this.each(function(){ + jQuery.attr( this, name, "" ); + if ( this.nodeType === 1 ) { + this.removeAttribute( name ); + } + }); + }, + + addClass: function( value ) { + /// + /// Agrega la clase o clases especificadas a cada uno de los elementos del conjunto de elementos coincidentes. + /// Parte de DOM/Attributes + /// + /// + /// Uno o varios nombres de clase para agregar al atributo de clase de cada elemento coincidente. + /// + /// + + if ( jQuery.isFunction(value) ) { + return this.each(function(i) { + var self = jQuery(this); + self.addClass( value.call(this, i, self.attr("class")) ); + }); + } + + if ( value && typeof value === "string" ) { + var classNames = (value || "").split( rspace ); + + for ( var i = 0, l = this.length; i < l; i++ ) { + var elem = this[i]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className ) { + elem.className = value; + + } else { + var className = " " + elem.className + " "; + for ( var c = 0, cl = classNames.length; c < cl; c++ ) { + if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) { + elem.className += " " + classNames[c]; + } + } + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + /// + /// Quita todas las clases especificadas del conjunto de elementos coincidentes. + /// Parte de DOM/Attributes + /// + /// + /// (Opcional) Nombre de clase para quitar del atributo de clase de cada elemento coincidente. + /// + /// + + if ( jQuery.isFunction(value) ) { + return this.each(function(i) { + var self = jQuery(this); + self.removeClass( value.call(this, i, self.attr("class")) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + var classNames = (value || "").split(rspace); + + for ( var i = 0, l = this.length; i < l; i++ ) { + var elem = this[i]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + var className = (" " + elem.className + " ").replace(rclass, " "); + for ( var c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[c] + " ", " "); + } + elem.className = className.substring(1, className.length - 1); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + /// + /// Agregar o quitar una clase de cada elemento del conjunto de elementos coincidentes, dependiendo + /// de la presencia de la clase o del valor del argumento modificador. + /// + /// + /// Nombre de clase al que se alterna para cada elemento del conjunto coincidente. + /// + /// + /// Valor booleano para determinar si la clase se debe agregar o quitar. + /// + /// + + var type = typeof value, isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function(i) { + var self = jQuery(this); + self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, i = 0, self = jQuery(this), + state = stateVal, + classNames = value.split( rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery.data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + /// + /// Compara la selección actual con una clase y devuelve un valor que indica si al menos una selección tiene una clase dada. + /// + /// Clase con la que se va a comparar + /// Devuelve True si al menos un elemento de la selección tiene la clase; de lo contrario, devuelve false. + + var className = " " + selector + " "; + for ( var i = 0, l = this.length; i < l; i++ ) { + if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + /// + /// Establece el valor de cada elemento coincidente. + /// Parte de DOM/Attributes + /// + /// + /// + /// Cadena de texto o matriz de cadenas para establecer como propiedad de valor de cada + /// elemento coincidente. + /// + + if ( value === undefined ) { + var elem = this[0]; + + if ( elem ) { + if ( jQuery.nodeName( elem, "option" ) ) { + return (elem.attributes.value || {}).specified ? elem.value : elem.text; + } + + // We need to handle select boxes special + if ( jQuery.nodeName( elem, "select" ) ) { + var index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { + var option = options[ i ]; + + if ( option.selected ) { + // Get the specifc value for the option + value = jQuery(option).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + } + + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) { + return elem.getAttribute("value") === null ? "on" : elem.value; + } + + + // Everything else, we just grab the value + return (elem.value || "").replace(rreturn, ""); + + } + + return undefined; + } + + var isFunction = jQuery.isFunction(value); + + return this.each(function(i) { + var self = jQuery(this), val = value; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call(this, i, self.val()); + } + + // Typecast each time if the value is a Function and the appended + // value is therefore different each time. + if ( typeof val === "number" ) { + val += ""; + } + + if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) { + this.checked = jQuery.inArray( self.val(), val ) >= 0; + + } else if ( jQuery.nodeName( this, "select" ) ) { + var values = jQuery.makeArray(val); + + jQuery( "option", this ).each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + this.selectedIndex = -1; + } + + } else { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attr: function( elem, name, value, pass ) { + /// + /// Este método es interno. + /// + /// + + // don't set attributes on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { + return undefined; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery(elem)[name](value); + } + + var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ), + // Whether we are setting (or getting) + set = value !== undefined; + + // Try to normalize/fix the name + name = notxml && jQuery.props[ name ] || name; + + // Only do all the following if this is a node (faster for style) + if ( elem.nodeType === 1 ) { + // These attributes require special treatment + var special = rspecialurl.test( name ); + + // Safari mis-reports the default selected property of an option + // Accessing the parent's selectedIndex property fixes it + if ( name === "selected" && !jQuery.support.optSelected ) { + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + + // If applicable, access the attribute via the DOM 0 way + if ( name in elem && notxml && !special ) { + if ( set ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } + + elem[ name ] = value; + } + + // browsers index elements by id/name on forms, give priority to attributes. + if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) { + return elem.getAttributeNode( name ).nodeValue; + } + + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + if ( name === "tabIndex" ) { + var attributeNode = elem.getAttributeNode( "tabIndex" ); + + return attributeNode && attributeNode.specified ? + attributeNode.value : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + + return elem[ name ]; + } + + if ( !jQuery.support.style && notxml && name === "style" ) { + if ( set ) { + elem.style.cssText = "" + value; + } + + return elem.style.cssText; + } + + if ( set ) { + // convert the value to a string (all browsers do this but IE) see #1070 + elem.setAttribute( name, "" + value ); + } + + var attr = !jQuery.support.hrefNormalized && notxml && special ? + // Some attributes require a special call on IE + elem.getAttribute( name, 2 ) : + elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return attr === null ? undefined : attr; + } + + // elem is actually elem.style ... set the style + // Using attr for specific style information is now deprecated. Use style insead. + return jQuery.style( elem, name, value ); + } +}); +var fcleanup = function( nm ) { + return nm.replace(/[^\w\s\.\|`]/g, function( ch ) { + return "\\" + ch; + }); +}; + +/* + * A number of helper functions used for managing events. + * Many of the ideas behind this code originated from + * Dean Edwards' addEvent library. + */ +jQuery.event = { + + // Bind an event to an element + // Original by Dean Edwards + add: function( elem, types, handler, data ) { + /// + /// Este método es interno. + /// + /// + + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // For whatever reason, IE has trouble passing the window object + // around, causing it to be cloned in the process + if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) { + elem = window; + } + + // Make sure that the function being executed has a unique ID + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // if data is passed, bind to handler + if ( data !== undefined ) { + // Create temporary function pointer to original handler + var fn = handler; + + // Create unique handler function, wrapped around original handler + handler = jQuery.proxy( fn ); + + // Store data in unique handler + handler.data = data; + } + + // Init the element's event structure + var events = jQuery.data( elem, "events" ) || jQuery.data( elem, "events", {} ), + handle = jQuery.data( elem, "handle" ), eventHandle; + + if ( !handle ) { + eventHandle = function() { + // Handle the second event of a trigger and when + // an event is called after a page has unloaded + return typeof jQuery !== "undefined" && !jQuery.event.triggered ? + jQuery.event.handle.apply( eventHandle.elem, arguments ) : + undefined; + }; + + handle = jQuery.data( elem, "handle", eventHandle ); + } + + // If no handle is found then we must be trying to bind to one of the + // banned noData elements + if ( !handle ) { + return; + } + + // Add elem as a property of the handle function + // This is to prevent a memory leak with non-native + // event in IE. + handle.elem = elem; + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = types.split( /\s+/ ); + + var type, i = 0; + + while ( (type = types[ i++ ]) ) { + // Namespaced event handlers + var namespaces = type.split("."); + type = namespaces.shift(); + + if ( i > 1 ) { + handler = jQuery.proxy( handler ); + + if ( data !== undefined ) { + handler.data = data; + } + } + + handler.type = namespaces.slice(0).sort().join("."); + + // Get the current list of functions bound to this event + var handlers = events[ type ], + special = this.special[ type ] || {}; + + // Init the event handler queue + if ( !handlers ) { + handlers = events[ type ] = {}; + + // Check for a special event handler + // Only use addEventListener/attachEvent if the special + // events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, handler) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, handle, false ); + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, handle ); + } + } + } + + if ( special.add ) { + var modifiedHandler = special.add.call( elem, handler, data, namespaces, handlers ); + if ( modifiedHandler && jQuery.isFunction( modifiedHandler ) ) { + modifiedHandler.guid = modifiedHandler.guid || handler.guid; + modifiedHandler.data = modifiedHandler.data || handler.data; + modifiedHandler.type = modifiedHandler.type || handler.type; + handler = modifiedHandler; + } + } + + // Add the function to the element's handler list + handlers[ handler.guid ] = handler; + + // Keep track of which events have been used, for global triggering + this.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler ) { + /// + /// Este método es interno. + /// + /// + + // don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + var events = jQuery.data( elem, "events" ), ret, type, fn; + + if ( events ) { + // Unbind all events for the element + if ( types === undefined || (typeof types === "string" && types.charAt(0) === ".") ) { + for ( type in events ) { + this.remove( elem, type + (types || "") ); + } + } else { + // types is actually an event object here + if ( types.type ) { + handler = types.handler; + types = types.type; + } + + // Handle multiple events separated by a space + // jQuery(...).unbind("mouseover mouseout", fn); + types = types.split(/\s+/); + var i = 0; + while ( (type = types[ i++ ]) ) { + // Namespaced event handlers + var namespaces = type.split("."); + type = namespaces.shift(); + var all = !namespaces.length, + cleaned = jQuery.map( namespaces.slice(0).sort(), fcleanup ), + namespace = new RegExp("(^|\\.)" + cleaned.join("\\.(?:.*\\.)?") + "(\\.|$)"), + special = this.special[ type ] || {}; + + if ( events[ type ] ) { + // remove the given handler for the given type + if ( handler ) { + fn = events[ type ][ handler.guid ]; + delete events[ type ][ handler.guid ]; + + // remove all handlers for the given type + } else { + for ( var handle in events[ type ] ) { + // Handle the removal of namespaced events + if ( all || namespace.test( events[ type ][ handle ].type ) ) { + delete events[ type ][ handle ]; + } + } + } + + if ( special.remove ) { + special.remove.call( elem, namespaces, fn); + } + + // remove generic event handler if no more handlers exist + for ( ret in events[ type ] ) { + break; + } + if ( !ret ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, jQuery.data( elem, "handle" ), false ); + } else if ( elem.detachEvent ) { + elem.detachEvent( "on" + type, jQuery.data( elem, "handle" ) ); + } + } + ret = null; + delete events[ type ]; + } + } + } + } + + // Remove the expando if it's no longer used + for ( ret in events ) { + break; + } + if ( !ret ) { + var handle = jQuery.data( elem, "handle" ); + if ( handle ) { + handle.elem = null; + } + jQuery.removeData( elem, "events" ); + jQuery.removeData( elem, "handle" ); + } + } + }, + + // bubbling is internal + trigger: function( event, data, elem /*, bubbling */ ) { + /// + /// This method is internal. + /// + /// + + // Event object or event type + var type = event.type || event, + bubbling = arguments[3]; + + if ( !bubbling ) { + event = typeof event === "object" ? + // jQuery.Event object + event[expando] ? event : + // Object literal + jQuery.extend( jQuery.Event(type), event ) : + // Just the event type (string) + jQuery.Event(type); + + if ( type.indexOf("!") >= 0 ) { + event.type = type = type.slice(0, -1); + event.exclusive = true; + } + + // Handle a global trigger + if ( !elem ) { + // Don't bubble custom events when global (to avoid too much overhead) + event.stopPropagation(); + + // Only trigger if we've ever bound an event for it + if ( this.global[ type ] ) { + jQuery.each( jQuery.cache, function() { + if ( this.events && this.events[type] ) { + jQuery.event.trigger( event, data, this.handle.elem ); + } + }); + } + } + + // Handle triggering a single element + + // don't do events on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { + return undefined; + } + + // Clean up in case it is reused + event.result = undefined; + event.target = elem; + + // Clone the incoming data, if any + data = jQuery.makeArray( data ); + data.unshift( event ); + } + + event.currentTarget = elem; + + // Trigger the event, it is assumed that "handle" is a function + var handle = jQuery.data( elem, "handle" ); + if ( handle ) { + handle.apply( elem, data ); + } + + var parent = elem.parentNode || elem.ownerDocument; + + // Trigger an inline bound script + try { + if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) { + if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) { + event.result = false; + } + } + + // prevent IE from throwing an error for some elements with some event types, see #3533 + } catch (e) {} + + if ( !event.isPropagationStopped() && parent ) { + jQuery.event.trigger( event, data, parent, true ); + + } else if ( !event.isDefaultPrevented() ) { + var target = event.target, old, + isClick = jQuery.nodeName(target, "a") && type === "click"; + + if ( !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) { + try { + if ( target[ type ] ) { + // Make sure that we don't accidentally re-trigger the onFOO events + old = target[ "on" + type ]; + + if ( old ) { + target[ "on" + type ] = null; + } + + this.triggered = true; + target[ type ](); + } + + // prevent IE from throwing an error for some elements with some event types, see #3533 + } catch (e) {} + + if ( old ) { + target[ "on" + type ] = old; + } + + this.triggered = false; + } + } + }, + + handle: function( event ) { + /// + /// Este método es interno. + /// + /// + + // returned undefined or false + var all, handlers; + + event = arguments[0] = jQuery.event.fix( event || window.event ); + event.currentTarget = this; + + // Namespaced event handlers + var namespaces = event.type.split("."); + event.type = namespaces.shift(); + + // Cache this now, all = true means, any handler + all = !namespaces.length && !event.exclusive; + + var namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)"); + + handlers = ( jQuery.data(this, "events") || {} )[ event.type ]; + + for ( var j in handlers ) { + var handler = handlers[ j ]; + + // Filter the functions by class + if ( all || namespace.test(handler.type) ) { + // Pass in a reference to the handler function itself + // So that we can later remove it + event.handler = handler; + event.data = handler.data; + + var ret = handler.apply( this, arguments ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + + if ( event.isImmediatePropagationStopped() ) { + break; + } + + } + } + + return event.result; + }, + + props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), + + fix: function( event ) { + /// + /// Este método es interno. + /// + /// + + if ( event[ expando ] ) { + return event; + } + + // store a copy of the original event object + // and "clone" to set read-only properties + var originalEvent = event; + event = jQuery.Event( originalEvent ); + + for ( var i = this.props.length, prop; i; ) { + prop = this.props[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary + if ( !event.target ) { + event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either + } + + // check if target is a textnode (safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && event.fromElement ) { + event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; + } + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && event.clientX != null ) { + var doc = document.documentElement, body = document.body; + event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); + event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); + } + + // Add which for key events + if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) { + event.which = event.charCode || event.keyCode; + } + + // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) + if ( !event.metaKey && event.ctrlKey ) { + event.metaKey = event.ctrlKey; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && event.button !== undefined ) { + event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); + } + + return event; + }, + + // Deprecated, use jQuery.guid instead + guid: 1E8, + + // Deprecated, use jQuery.proxy instead + proxy: jQuery.proxy, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady, + teardown: jQuery.noop + }, + + live: { + add: function( proxy, data, namespaces, live ) { + jQuery.extend( proxy, data || {} ); + + proxy.guid += data.selector + data.live; + data.liveProxy = proxy; + + jQuery.event.add( this, data.live, liveHandler, data ); + + }, + + remove: function( namespaces ) { + if ( namespaces.length ) { + var remove = 0, name = new RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)"); + + jQuery.each( (jQuery.data(this, "events").live || {}), function() { + if ( name.test(this.type) ) { + remove++; + } + }); + + if ( remove < 1 ) { + jQuery.event.remove( this, namespaces[0], liveHandler ); + } + } + }, + special: {} + }, + beforeunload: { + setup: function( data, namespaces, fn ) { + // We only want to do this special case on windows + if ( this.setInterval ) { + this.onbeforeunload = fn; + } + + return false; + }, + teardown: function( namespaces, fn ) { + if ( this.onbeforeunload === fn ) { + this.onbeforeunload = null; + } + } + } + } +}; + +jQuery.Event = function( src ) { + // Allow instantiation without the 'new' keyword + if ( !this.preventDefault ) { + return new jQuery.Event( src ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + // Event type + } else { + this.type = src; + } + + // timeStamp is buggy for some events on Firefox(#3843) + // So we won't rely on the native value + this.timeStamp = now(); + + // Mark it as fixed + this[ expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + } + // otherwise set the returnValue property of the original event to false (IE) + e.returnValue = false; + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Checks if an event happened on an element within another element +// Used in jQuery.event.special.mouseenter and mouseleave handlers +var withinElement = function( event ) { + // Check if mouse(over|out) are still within the same parent element + var parent = event.relatedTarget; + + // Traverse up the tree + while ( parent && parent !== this ) { + // Firefox sometimes assigns relatedTarget a XUL element + // which we cannot access the parentNode property of + try { + parent = parent.parentNode; + + // assuming we've left the element since we most likely mousedover a xul element + } catch(e) { + break; + } + } + + if ( parent !== this ) { + // set the correct event type + event.type = event.data; + + // handle event if we actually just moused on to a non sub-element + jQuery.event.handle.apply( this, arguments ); + } + +}, + +// In case of event delegation, we only need to rename the event.type, +// liveHandler will take care of the rest. +delegate = function( event ) { + event.type = event.data; + jQuery.event.handle.apply( this, arguments ); +}; + +// Create mouseenter and mouseleave events +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + setup: function( data ) { + jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig ); + }, + teardown: function( data ) { + jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement ); + } + }; +}); + +// submit delegation +if ( !jQuery.support.submitBubbles ) { + +jQuery.event.special.submit = { + setup: function( data, namespaces, fn ) { + if ( this.nodeName.toLowerCase() !== "form" ) { + jQuery.event.add(this, "click.specialSubmit." + fn.guid, function( e ) { + var elem = e.target, type = elem.type; + + if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { + return trigger( "submit", this, arguments ); + } + }); + + jQuery.event.add(this, "keypress.specialSubmit." + fn.guid, function( e ) { + var elem = e.target, type = elem.type; + + if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { + return trigger( "submit", this, arguments ); + } + }); + + } else { + return false; + } + }, + + remove: function( namespaces, fn ) { + jQuery.event.remove( this, "click.specialSubmit" + (fn ? "."+fn.guid : "") ); + jQuery.event.remove( this, "keypress.specialSubmit" + (fn ? "."+fn.guid : "") ); + } +}; + +} + +// change delegation, happens here so we have bind. +if ( !jQuery.support.changeBubbles ) { + +var formElems = /textarea|input|select/i; + +function getVal( elem ) { + var type = elem.type, val = elem.value; + + if ( type === "radio" || type === "checkbox" ) { + val = elem.checked; + + } else if ( type === "select-multiple" ) { + val = elem.selectedIndex > -1 ? + jQuery.map( elem.options, function( elem ) { + return elem.selected; + }).join("-") : + ""; + + } else if ( elem.nodeName.toLowerCase() === "select" ) { + val = elem.selectedIndex; + } + + return val; +} + +function testChange( e ) { + var elem = e.target, data, val; + + if ( !formElems.test( elem.nodeName ) || elem.readOnly ) { + return; + } + + data = jQuery.data( elem, "_change_data" ); + val = getVal(elem); + + // the current data will be also retrieved by beforeactivate + if ( e.type !== "focusout" || elem.type !== "radio" ) { + jQuery.data( elem, "_change_data", val ); + } + + if ( data === undefined || val === data ) { + return; + } + + if ( data != null || val ) { + e.type = "change"; + return jQuery.event.trigger( e, arguments[1], elem ); + } +} + +jQuery.event.special.change = { + filters: { + focusout: testChange, + + click: function( e ) { + var elem = e.target, type = elem.type; + + if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) { + return testChange.call( this, e ); + } + }, + + // Change has to be called before submit + // Keydown will be called before keypress, which is used in submit-event delegation + keydown: function( e ) { + var elem = e.target, type = elem.type; + + if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") || + (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || + type === "select-multiple" ) { + return testChange.call( this, e ); + } + }, + + // Beforeactivate happens also before the previous element is blurred + // with this event you can't trigger a change event, but you can store + // information/focus[in] is not needed anymore + beforeactivate: function( e ) { + var elem = e.target; + + if ( elem.nodeName.toLowerCase() === "input" && elem.type === "radio" ) { + jQuery.data( elem, "_change_data", getVal(elem) ); + } + } + }, + setup: function( data, namespaces, fn ) { + for ( var type in changeFilters ) { + jQuery.event.add( this, type + ".specialChange." + fn.guid, changeFilters[type] ); + } + + return formElems.test( this.nodeName ); + }, + remove: function( namespaces, fn ) { + for ( var type in changeFilters ) { + jQuery.event.remove( this, type + ".specialChange" + (fn ? "."+fn.guid : ""), changeFilters[type] ); + } + + return formElems.test( this.nodeName ); + } +}; + +var changeFilters = jQuery.event.special.change.filters; + +} + +function trigger( type, elem, args ) { + args[0].type = type; + return jQuery.event.handle.apply( elem, args ); +} + +// Create "bubbling" focus and blur events +if ( document.addEventListener ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + jQuery.event.special[ fix ] = { + setup: function() { + /// + /// Este método es interno. + /// + /// + + this.addEventListener( orig, handler, true ); + }, + teardown: function() { + /// + /// Este método es interno. + /// + /// + + this.removeEventListener( orig, handler, true ); + } + }; + + function handler( e ) { + e = jQuery.event.fix( e ); + e.type = fix; + return jQuery.event.handle.call( this, e ); + } + }); +} + +// jQuery.each(["bind", "one"], function( i, name ) { +// jQuery.fn[ name ] = function( type, data, fn ) { +// // Handle object literals +// if ( typeof type === "object" ) { +// for ( var key in type ) { +// this[ name ](key, data, type[key], fn); +// } +// return this; +// } +// +// if ( jQuery.isFunction( data ) ) { +// fn = data; +// data = undefined; +// } +// +// var handler = name === "one" ? jQuery.proxy( fn, function( event ) { +// jQuery( this ).unbind( event, handler ); +// return fn.apply( this, arguments ); +// }) : fn; +// +// return type === "unload" && name !== "one" ? +// this.one( type, data, fn ) : +// this.each(function() { +// jQuery.event.add( this, type, handler, data ); +// }); +// }; +// }); + +jQuery.fn[ "bind" ] = function( type, data, fn ) { + /// + /// Enlaza un controlador a uno o varios eventos para cada elemento coincidente. También puede enlazar eventos personalizados. + /// + /// Uno o varios tipos de eventos separados por un espacio. Los valores de tipo de evento integrados son: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error . + /// Datos adicionales pasados al controlador de eventos como event.data + /// Función que se enlaza al evento en cada uno de los elementos del conjunto de elementos coincidentes. Se debe usar una función callback(eventObject) como esta, que se corresponde con el elemento DOM. + + // Controlar literales de objeto + if ( typeof type === "object" ) { + for ( var key in type ) { + this[ "bind" ](key, data, type[key], fn); + } + return this; + } + + if ( jQuery.isFunction( data ) ) { + fn = data; + data = undefined; + } + + var handler = "bind" === "one" ? jQuery.proxy( fn, function( event ) { + jQuery( this ).unbind( event, handler ); + return fn.apply( this, arguments ); + }) : fn; + + return type === "unload" && "bind" !== "one" ? + this.one( type, data, fn ) : + this.each(function() { + jQuery.event.add( this, type, handler, data ); + }); +}; + +jQuery.fn[ "one" ] = function( type, data, fn ) { + /// + /// Enlaza un controlador a uno o varios eventos para que se ejecuten exactamente una vez para cada elemento coincidente. + /// + /// Uno o varios tipos de eventos separados por un espacio. Los valores de tipo de evento integrados son: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error . + /// Datos adicionales pasados al controlador de eventos como event.data + /// Función que se enlaza al evento en cada uno de los elementos del conjunto de elementos coincidentes. Se debe usar una función callback(eventObject) como esta, que se corresponde con el elemento DOM. + + // Handle object literals + if ( typeof type === "object" ) { + for ( var key in type ) { + this[ "one" ](key, data, type[key], fn); + } + return this; + } + + if ( jQuery.isFunction( data ) ) { + fn = data; + data = undefined; + } + + var handler = "one" === "one" ? jQuery.proxy( fn, function( event ) { + jQuery( this ).unbind( event, handler ); + return fn.apply( this, arguments ); + }) : fn; + + return type === "unload" && "one" !== "one" ? + this.one( type, data, fn ) : + this.each(function() { + jQuery.event.add( this, type, handler, data ); + }); +}; + +jQuery.fn.extend({ + unbind: function( type, fn ) { + /// + /// Desenlaza un controlador de uno o varios eventos para cada elemento coincidente. + /// + /// Uno o varios tipos de eventos separados por un espacio. Los valores de tipo de evento integrados son: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error . + /// Función que se enlaza al evento en cada uno de los elementos del conjunto de elementos coincidentes. Se debe usar una función callback(eventObject) como esta, que se corresponde con el elemento DOM. + + // Handle object literals + if ( typeof type === "object" && !type.preventDefault ) { + for ( var key in type ) { + this.unbind(key, type[key]); + } + return this; + } + + return this.each(function() { + jQuery.event.remove( this, type, fn ); + }); + }, + trigger: function( type, data ) { + /// + /// Desencadena un tipo de evento en cada elemento coincidente. + /// + /// Uno o varios tipos de eventos separados por un espacio. Los valores de tipo de evento integrados son: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error . + /// Datos adicionales pasados al controlador de eventos como argumentos adicionales. + /// Este parámetro no está documentado. + + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + + triggerHandler: function( type, data ) { + /// + /// Desencadena todos los controladores de eventos enlazados en un elemento de un tipo de evento específico sin ejecutar las acciones predeterminadas del explorador. + /// + /// Uno o varios tipos de eventos separados por un espacio. Los valores de tipo de evento integrados son: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error . + /// Datos adicionales pasados al controlador de eventos como argumentos adicionales. + /// Este parámetro no está documentado. + + if ( this[0] ) { + var event = jQuery.Event( type ); + event.preventDefault(); + event.stopPropagation(); + jQuery.event.trigger( event, data, this[0] ); + return event.result; + } + }, + + toggle: function( fn ) { + /// + /// Alterna entre dos o más llamadas a función cada clic alterno. + /// + /// Funciones cuya ejecución se alterna + + // Save reference to arguments for access in closure + var args = arguments, i = 1; + + // link all the functions, so any of them can unbind this click handler + while ( i < args.length ) { + jQuery.proxy( fn, args[ i++ ] ); + } + + return this.click( jQuery.proxy( fn, function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + })); + }, + + hover: function( fnOver, fnOut ) { + /// + /// Simula el movimiento del mouse dentro y fuera de un objeto (mantener el mouse). + /// + /// Función que se activa cuando el mouse se coloca en un elemento coincidente. + /// Función que se activa cuando el mouse se desplaza fuera de un elemento coincidente. + + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +// jQuery.each(["live", "die"], function( i, name ) { +// jQuery.fn[ name ] = function( types, data, fn ) { +// var type, i = 0; +// +// if ( jQuery.isFunction( data ) ) { +// fn = data; +// data = undefined; +// } +// +// types = (types || "").split( /\s+/ ); +// +// while ( (type = types[ i++ ]) != null ) { +// type = type === "focus" ? "focusin" : // focus --> focusin +// type === "blur" ? "focusout" : // blur --> focusout +// type === "hover" ? types.push("mouseleave") && "mouseenter" : // hover support +// type; +// +// if ( name === "live" ) { +// // bind live handler +// jQuery( this.context ).bind( liveConvert( type, this.selector ), { +// data: data, selector: this.selector, live: type +// }, fn ); +// +// } else { +// // unbind live handler +// jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null ); +// } +// } +// +// return this; +// } +// }); + +jQuery.fn[ "live" ] = function( types, data, fn ) { + /// + /// Asociar un controlador al evento para todos los elementos que coinciden con el selector actual, ahora o + /// en el futuro. + /// + /// + /// Cadena que contiene un tipo de evento de JavaScript, como "click" o "keydown". + /// + /// + /// Asignación de datos que se pasará al controlador de eventos. + /// + /// + /// Función para ejecutar en el momento en que se desencadena el evento. + /// + /// + + var type, i = 0; + + if ( jQuery.isFunction( data ) ) { + fn = data; + data = undefined; + } + + types = (types || "").split( /\s+/ ); + + while ( (type = types[ i++ ]) != null ) { + type = type === "focus" ? "focusin" : // focus --> focusin + type === "blur" ? "focusout" : // blur --> focusout + type === "hover" ? types.push("mouseleave") && "mouseenter" : // hover support + type; + + if ( "live" === "live" ) { + // bind live handler + jQuery( this.context ).bind( liveConvert( type, this.selector ), { + data: data, selector: this.selector, live: type + }, fn ); + + } else { + // unbind live handler + jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null ); + } + } + + return this; +} + +jQuery.fn[ "die" ] = function( types, data, fn ) { + /// + /// Quitar de los elementos todos los controladores de eventos asociados previamente con .live(). + /// + /// + /// Cadena que contiene un tipo de evento de JavaScript, como click o keydown. + /// + /// + /// Función que dejará de ejecutarse. + /// + /// + + var type, i = 0; + + if ( jQuery.isFunction( data ) ) { + fn = data; + data = undefined; + } + + types = (types || "").split( /\s+/ ); + + while ( (type = types[ i++ ]) != null ) { + type = type === "focus" ? "focusin" : // focus --> focusin + type === "blur" ? "focusout" : // blur --> focusout + type === "hover" ? types.push("mouseleave") && "mouseenter" : // hover support + type; + + if ( "die" === "live" ) { + // bind live handler + jQuery( this.context ).bind( liveConvert( type, this.selector ), { + data: data, selector: this.selector, live: type + }, fn ); + + } else { + // unbind live handler + jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null ); + } + } + + return this; +} + +function liveHandler( event ) { + var stop, elems = [], selectors = [], args = arguments, + related, match, fn, elem, j, i, l, data, + live = jQuery.extend({}, jQuery.data( this, "events" ).live); + + // Make sure we avoid non-left-click bubbling in Firefox (#3861) + if ( event.button && event.type === "click" ) { + return; + } + + for ( j in live ) { + fn = live[j]; + if ( fn.live === event.type || + fn.altLive && jQuery.inArray(event.type, fn.altLive) > -1 ) { + + data = fn.data; + if ( !(data.beforeFilter && data.beforeFilter[event.type] && + !data.beforeFilter[event.type](event)) ) { + selectors.push( fn.selector ); + } + } else { + delete live[j]; + } + } + + match = jQuery( event.target ).closest( selectors, event.currentTarget ); + + for ( i = 0, l = match.length; i < l; i++ ) { + for ( j in live ) { + fn = live[j]; + elem = match[i].elem; + related = null; + + if ( match[i].selector === fn.selector ) { + // Those two events require additional checking + if ( fn.live === "mouseenter" || fn.live === "mouseleave" ) { + related = jQuery( event.relatedTarget ).closest( fn.selector )[0]; + } + + if ( !related || related !== elem ) { + elems.push({ elem: elem, fn: fn }); + } + } + } + } + + for ( i = 0, l = elems.length; i < l; i++ ) { + match = elems[i]; + event.currentTarget = match.elem; + event.data = match.fn.data; + if ( match.fn.apply( match.elem, args ) === false ) { + stop = false; + break; + } + } + + return stop; +} + +function liveConvert( type, selector ) { + return "live." + (type ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&"); +} + +// jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + +// "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + +// "change select submit keydown keypress keyup error").split(" "), function( i, name ) { +// +// // Handle event binding +// jQuery.fn[ name ] = function( fn ) { +// return fn ? this.bind( name, fn ) : this.trigger( name ); +// }; +// +// if ( jQuery.attrFn ) { +// jQuery.attrFn[ name ] = true; +// } +// }); + +jQuery.fn[ "blur" ] = function( fn ) { + /// + /// 1: blur(): desencadena el evento blur para cada elemento coincidente. + /// 2: blur(fn): enlaza una función al evento blur de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "blur", fn ) : this.trigger( "blur" ); +}; + +jQuery.fn[ "focus" ] = function( fn ) { + /// + /// 1: focus(): desencadena el evento focus de cada elemento coincidente. + /// 2: focus(fn): enlaza una función al evento focus de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "focus", fn ) : this.trigger( "focus" ); +}; + +jQuery.fn[ "focusin" ] = function( fn ) { + /// + /// Enlazar un controlador de eventos al evento de JavaScript "focusin". + /// + /// + /// Función para ejecutar cada vez que se desencadena el evento. + /// + /// + + return fn ? this.bind( "focusin", fn ) : this.trigger( "focusin" ); +}; + +jQuery.fn[ "focusout" ] = function( fn ) { + /// + /// Enlazar un controlador de eventos al evento de JavaScript "focusout". + /// + /// + /// Función para ejecutar cada vez que se desencadena el evento. + /// + /// + + return fn ? this.bind( "focusout", fn ) : this.trigger( "focusout" ); +}; + +jQuery.fn[ "load" ] = function( fn ) { + /// + /// 1: load(): desencadena el evento load de cada elemento coincidente. + /// 2: load(fn); enlaza una función al evento load de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "load", fn ) : this.trigger( "load" ); +}; + +jQuery.fn[ "resize" ] = function( fn ) { + /// + /// 1: resize(): desencadena el evento resize de cada elemento coincidente. + /// 2: resize(fn): enlaza una función al evento resize de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "resize", fn ) : this.trigger( "resize" ); +}; + +jQuery.fn[ "scroll" ] = function( fn ) { + /// + /// 1: scroll(): desencadena el evento scroll de cada elemento coincidente. + /// 2: scroll(fn): enlaza una función al evento scroll de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "scroll", fn ) : this.trigger( "scroll" ); +}; + +jQuery.fn[ "unload" ] = function( fn ) { + /// + /// 1: unload(); desencadena el evento unload de cada elemento coincidente. + /// 2: unload(fn); enlaza una función al evento unload de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "unload", fn ) : this.trigger( "unload" ); +}; + +jQuery.fn[ "click" ] = function( fn ) { + /// + /// 1: click(): desencadena el evento click de cada elemento coincidente. + /// 2: click(fn): enlaza una función al evento click de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "click", fn ) : this.trigger( "click" ); +}; + +jQuery.fn[ "dblclick" ] = function( fn ) { + /// + /// 1: dblclick(); desencadena el evento dblclick de cada elemento coincidente. + /// 2: dblclick(fn): enlaza una función al evento dblclick de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "dblclick", fn ) : this.trigger( "dblclick" ); +}; + +jQuery.fn[ "mousedown" ] = function( fn ) { + /// + /// Enlaza una función al evento mousedown de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "mousedown", fn ) : this.trigger( "mousedown" ); +}; + +jQuery.fn[ "mouseup" ] = function( fn ) { + /// + /// Enlaza una función al evento mouseup de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "mouseup", fn ) : this.trigger( "mouseup" ); +}; + +jQuery.fn[ "mousemove" ] = function( fn ) { + /// + /// Enlaza una función al evento mousemove de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "mousemove", fn ) : this.trigger( "mousemove" ); +}; + +jQuery.fn[ "mouseover" ] = function( fn ) { + /// + /// Enlaza una función al evento mouseover de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "mouseover", fn ) : this.trigger( "mouseover" ); +}; + +jQuery.fn[ "mouseout" ] = function( fn ) { + /// + /// Enlaza una función al evento mouseout de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "mouseout", fn ) : this.trigger( "mouseout" ); +}; + +jQuery.fn[ "mouseenter" ] = function( fn ) { + /// + /// Enlaza una función al evento mouseenter de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "mouseenter", fn ) : this.trigger( "mouseenter" ); +}; + +jQuery.fn[ "mouseleave" ] = function( fn ) { + /// + /// Enlaza una función al evento mouseleave de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "mouseleave", fn ) : this.trigger( "mouseleave" ); +}; + +jQuery.fn[ "change" ] = function( fn ) { + /// + /// 1: change(): desencadena el evento change de cada elemento coincidente. + /// 2: change(fn); enlaza una función al evento change de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "change", fn ) : this.trigger( "change" ); +}; + +jQuery.fn[ "select" ] = function( fn ) { + /// + /// 1: select(): desencadena el evento select de cada elemento coincidente. + /// 2: select(fn); enlaza una función al evento select de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "select", fn ) : this.trigger( "select" ); +}; + +jQuery.fn[ "submit" ] = function( fn ) { + /// + /// 1: submit(): desencadena el evento submit de cada elemento coincidente. + /// 2: submit(fn); enlaza una función al evento submit de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "submit", fn ) : this.trigger( "submit" ); +}; + +jQuery.fn[ "keydown" ] = function( fn ) { + /// + /// 1: keydown(): desencadena el evento keydown de cada elemento coincidente. + /// 2: keydown(fn); enlaza una función al evento keydown de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "keydown", fn ) : this.trigger( "keydown" ); +}; + +jQuery.fn[ "keypress" ] = function( fn ) { + /// + /// 1: keypress(): desencadena el evento keypress de cada elemento coincidente. + /// 2: keypress(fn); enlaza una función al evento keypress de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "keypress", fn ) : this.trigger( "keypress" ); +}; + +jQuery.fn[ "keyup" ] = function( fn ) { + /// + /// 1: keyup(): desencadena el evento keyup de cada elemento coincidente. + /// 2: keyup(fn): enlaza una función al evento keyup de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "keyup", fn ) : this.trigger( "keyup" ); +}; + +jQuery.fn[ "error" ] = function( fn ) { + /// + /// 1: error(): desencadena el evento error de cada elemento coincidente. + /// 2: error(fn); enlaza una función al evento error de cada elemento coincidente. + /// + /// La función que se va a ejecutar. + /// + + return fn ? this.bind( "error", fn ) : this.trigger( "error" ); +}; + +// Prevent memory leaks in IE +// Window isn't included so as not to unbind existing unload events +// More info: +// - http://isaacschlueter.com/2006/10/msie-memory-leaks/ +if ( window.attachEvent && !window.addEventListener ) { + window.attachEvent("onunload", function() { + for ( var id in jQuery.cache ) { + if ( jQuery.cache[ id ].handle ) { + // Try/Catch is to handle iframes being unloaded, see #4280 + try { + jQuery.event.remove( jQuery.cache[ id ].handle.elem ); + } catch(e) {} + } + } + }); +} +/*! + * Sizzle CSS Selector Engine - v1.0 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function(){ + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function(selector, context, results, seed) { + results = results || []; + var origContext = context = context || document; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context), + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context ); + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set ); + } + } + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + var ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0]; + } + + if ( context ) { + var ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray(set); + } else { + prune = false; + } + + while ( parts.length ) { + var cur = parts.pop(), pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + } else if ( context && context.nodeType === 1 ) { + for ( var i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + } else { + for ( var i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function(results){ + /// + /// Quita todos los elementos duplicados de una matriz de elementos. + /// + /// Matriz que se va a convertir + /// La matriz después de la conversión. + + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort(sortOrder); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[i-1] ) { + results.splice(i--, 1); + } + } + } + } + + return results; +}; + +Sizzle.matches = function(expr, set){ + return Sizzle(expr, null, null, set); +}; + +Sizzle.find = function(expr, context, isXML){ + var set, match; + + if ( !expr ) { + return []; + } + + for ( var i = 0, l = Expr.order.length; i < l; i++ ) { + var type = Expr.order[i], match; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + var left = match[1]; + match.splice(1,1); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace(/\\/g, ""); + set = Expr.find[ type ]( match, context, isXML ); + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = context.getElementsByTagName("*"); + } + + return {set: set, expr: expr}; +}; + +Sizzle.filter = function(expr, set, inplace, not){ + var old = expr, result = [], curLoop = set, match, anyFound, + isXMLFilter = set && set[0] && isXML(set[0]); + + while ( expr && set.length ) { + for ( var type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + var filter = Expr.filter[ type ], found, item, left = match[1]; + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( var i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + var pass = not ^ !!found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + } else { + curLoop[i] = false; + } + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw "Syntax error, unrecognized expression: " + msg; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + match: { + ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + leftMatch: {}, + attrMap: { + "class": "className", + "for": "htmlFor" + }, + attrHandle: { + href: function(elem){ + return elem.getAttribute("href"); + } + }, + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !/\W/.test(part), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + ">": function(checkSet, part){ + var isPartStr = typeof part === "string"; + + if ( isPartStr && !/\W/.test(part) ) { + part = part.toLowerCase(); + + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + } else { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + "": function(checkSet, part, isXML){ + var doneName = done++, checkFn = dirCheck; + + if ( typeof part === "string" && !/\W/.test(part) ) { + var nodeCheck = part = part.toLowerCase(); + checkFn = dirNodeCheck; + } + + checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML); + }, + "~": function(checkSet, part, isXML){ + var doneName = done++, checkFn = dirCheck; + + if ( typeof part === "string" && !/\W/.test(part) ) { + var nodeCheck = part = part.toLowerCase(); + checkFn = dirNodeCheck; + } + + checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML); + } + }, + find: { + ID: function(match, context, isXML){ + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + return m ? [m] : []; + } + }, + NAME: function(match, context){ + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], results = context.getElementsByName(match[1]); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + TAG: function(match, context){ + return context.getElementsByTagName(match[1]); + } + }, + preFilter: { + CLASS: function(match, curLoop, inplace, result, not, isXML){ + match = " " + match[1].replace(/\\/g, "") + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + ID: function(match){ + return match[1].replace(/\\/g, ""); + }, + TAG: function(match, curLoop){ + return match[1].toLowerCase(); + }, + CHILD: function(match){ + if ( match[1] === "nth" ) { + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + ATTR: function(match, curLoop, inplace, result, not, isXML){ + var name = match[1].replace(/\\/g, ""); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + PSEUDO: function(match, curLoop, inplace, result, not){ + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + if ( !inplace ) { + result.push.apply( result, ret ); + } + return false; + } + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + POS: function(match){ + match.unshift( true ); + return match; + } + }, + filters: { + enabled: function(elem){ + return elem.disabled === false && elem.type !== "hidden"; + }, + disabled: function(elem){ + return elem.disabled === true; + }, + checked: function(elem){ + return elem.checked === true; + }, + selected: function(elem){ + // Accessing this property makes selected-by-default + // options in Safari work properly + elem.parentNode.selectedIndex; + return elem.selected === true; + }, + parent: function(elem){ + return !!elem.firstChild; + }, + empty: function(elem){ + return !elem.firstChild; + }, + has: function(elem, i, match){ + /// + /// Solo para uso interno; usar hasClass('class') + /// + /// + + return !!Sizzle( match[3], elem ).length; + }, + header: function(elem){ + return /h\d/i.test( elem.nodeName ); + }, + text: function(elem){ + return "text" === elem.type; + }, + radio: function(elem){ + return "radio" === elem.type; + }, + checkbox: function(elem){ + return "checkbox" === elem.type; + }, + file: function(elem){ + return "file" === elem.type; + }, + password: function(elem){ + return "password" === elem.type; + }, + submit: function(elem){ + return "submit" === elem.type; + }, + image: function(elem){ + return "image" === elem.type; + }, + reset: function(elem){ + return "reset" === elem.type; + }, + button: function(elem){ + return "button" === elem.type || elem.nodeName.toLowerCase() === "button"; + }, + input: function(elem){ + return /input|select|textarea|button/i.test(elem.nodeName); + } + }, + setFilters: { + first: function(elem, i){ + return i === 0; + }, + last: function(elem, i, match, array){ + return i === array.length - 1; + }, + even: function(elem, i){ + return i % 2 === 0; + }, + odd: function(elem, i){ + return i % 2 === 1; + }, + lt: function(elem, i, match){ + return i < match[3] - 0; + }, + gt: function(elem, i, match){ + return i > match[3] - 0; + }, + nth: function(elem, i, match){ + return match[3] - 0 === i; + }, + eq: function(elem, i, match){ + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function(elem, match, i, array){ + var name = match[1], filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; + } else if ( name === "not" ) { + var not = match[3]; + + for ( var i = 0, l = not.length; i < l; i++ ) { + if ( not[i] === elem ) { + return false; + } + } + + return true; + } else { + Sizzle.error( "Syntax error, unrecognized expression: " + name ); + } + }, + CHILD: function(elem, match){ + var type = match[1], node = elem; + switch (type) { + case 'only': + case 'first': + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + if ( type === "first" ) { + return true; + } + node = elem; + case 'last': + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + return true; + case 'nth': + var first = match[2], last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + var doneName = match[0], + parent = elem.parentNode; + + if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { + var count = 0; + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + parent.sizcache = doneName; + } + + var diff = elem.nodeIndex - last; + if ( first === 0 ) { + return diff === 0; + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + ID: function(elem, match){ + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + TAG: function(elem, match){ + return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; + }, + CLASS: function(elem, match){ + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + ATTR: function(elem, match){ + var name = match[1], + result = Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + POS: function(elem, match, i, array){ + var name = match[2], filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, function(all, num){ + return "\\" + (num - 0 + 1); + })); +} + +var makeArray = function(array, results) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 ); + +// Provide a fallback method if it does not work +} catch(e){ + makeArray = function(array, results) { + var ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + } else { + if ( typeof array.length === "number" ) { + for ( var i = 0, l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + } else { + for ( var i = 0; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + if ( a == b ) { + hasDuplicate = true; + } + return a.compareDocumentPosition ? -1 : 1; + } + + var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; +} else if ( "sourceIndex" in document.documentElement ) { + sortOrder = function( a, b ) { + if ( !a.sourceIndex || !b.sourceIndex ) { + if ( a == b ) { + hasDuplicate = true; + } + return a.sourceIndex ? -1 : 1; + } + + var ret = a.sourceIndex - b.sourceIndex; + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; +} else if ( document.createRange ) { + sortOrder = function( a, b ) { + if ( !a.ownerDocument || !b.ownerDocument ) { + if ( a == b ) { + hasDuplicate = true; + } + return a.ownerDocument ? -1 : 1; + } + + var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); + aRange.setStart(a, 0); + aRange.setEnd(a, 0); + bRange.setStart(b, 0); + bRange.setEnd(b, 0); + var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange); + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; +} + +// Utility function for retreiving the text value of an array of DOM nodes +function getText( elems ) { + var ret = "", elem; + + for ( var i = 0; elems[i]; i++ ) { + elem = elems[i]; + + // Get the text from text nodes and CDATA nodes + if ( elem.nodeType === 3 || elem.nodeType === 4 ) { + ret += elem.nodeValue; + + // Traverse everything else, except comment nodes + } else if ( elem.nodeType !== 8 ) { + ret += getText( elem.childNodes ); + } + } + + return ret; +} + +// [vsdoc] The following function has been modified for IntelliSense. +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + // var form = document.createElement("div"), + // id = "script" + (new Date).getTime(); + // form.innerHTML = ""; + + // // Inject it into the root element, check its status, and remove it quickly + // var root = document.documentElement; + // root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + // if ( document.getElementById( id ) ) { + Expr.find.ID = function(match, context, isXML){ + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; + } + }; + + Expr.filter.ID = function(elem, match){ + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + // } + + // root.removeChild( form ); + root = form = null; // release memory in IE +})(); + +// [vsdoc] The following function has been modified for IntelliSense. +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + // var div = document.createElement("div"); + // div.appendChild( document.createComment("") ); + + // Make sure no comments are found + // if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function(match, context){ + var results = context.getElementsByTagName(match[1]); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + // } + + // Check to see if an attribute returns normalized href attributes + // div.innerHTML = ""; + // if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + // div.firstChild.getAttribute("href") !== "#" ) { + Expr.attrHandle.href = function(elem){ + return elem.getAttribute("href", 2); + }; + // } + + div = null; // release memory in IE +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, div = document.createElement("div"); + div.innerHTML = "

"; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function(query, context, extra, seed){ + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && context.nodeType === 9 && !isXML(context) ) { + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(e){} + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + div = null; // release memory in IE + })(); +} + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
"; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function(match, context, isXML) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + div = null; // release memory in IE +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + elem = elem[dir]; + var match = false; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem.sizcache = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + elem = elem[dir]; + var match = false; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem.sizcache = doneName; + elem.sizset = i; + } + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +var contains = document.compareDocumentPosition ? function(a, b){ + /// + /// Comprobar si un nodo DOM está dentro de otro nodo DOM. + /// + /// + /// Elemento DOM que puede contener el otro elemento. + /// + /// + /// Nodo DOM que el otro elemento puede contener. + /// + /// + + return a.compareDocumentPosition(b) & 16; +} : function(a, b){ + /// + /// Comprobar si un nodo DOM está dentro de otro nodo DOM. + /// + /// + /// Elemento DOM que puede contener el otro elemento. + /// + /// + /// Nodo DOM que el otro elemento puede contener. + /// + /// + + return a !== b && (a.contains ? a.contains(b) : true); +}; + +var isXML = function(elem){ + /// + /// Determina si el parámetro pasado es un documento XML. + /// + /// Objeto que se va a comprobar + /// Devuelve True si el parámetro es un documento XML; de lo contrario, devuelve false. + + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function(selector, context){ + var tmpSet = [], later = "", match, + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.filters; +jQuery.unique = Sizzle.uniqueSort; +jQuery.getText = getText; +jQuery.isXMLDoc = isXML; +jQuery.contains = contains; + +return; + +window.Sizzle = Sizzle; + +})(); +var runtil = /Until$/, + rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, + slice = Array.prototype.slice; + +// Implement the identical functionality for filter and not +var winnow = function( elements, qualifier, keep ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return (elem === qualifier) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return (jQuery.inArray( elem, qualifier ) >= 0) === keep; + }); +}; + +jQuery.fn.extend({ + find: function( selector ) { + /// + /// Busca todos los elementos que coinciden con la expresión especificada. + /// Este método es una forma eficaz de buscar elementos descendientes + /// adicionales con los que realizar el proceso. + /// Toda la operación de búsqueda se realiza mediante una expresión jQuery. La expresión se puede + /// escribir mediante la sintaxis de selector de CSS 1-3 o lenguaje XPath básico. + /// Parte de DOM/Traversing + /// + /// + /// + /// Expresión con la que se va a realizar la búsqueda. + /// + /// + + var ret = this.pushStack( "", "find", selector ), length = 0; + + for ( var i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Asegúrese de que los resultados son únicos. + for ( var n = length; n < ret.length; n++ ) { + for ( var r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + /// + /// Reducir el conjunto de elementos coincidentes a aquellos que tienen un descendiente que coincida con + /// el selector o el elemento DOM. + /// + /// + /// Cadena que contiene una expresión de selector con la que deben coincidir los elementos. + /// + /// + + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + /// + /// Quita todos los elementos incluidos en la matriz de elementos del conjunto + /// de elementos coincidentes. Este método se usa para quitar uno o varios + /// elementos de un objeto jQuery. + /// Parte de DOM/Traversing + /// + /// + /// Conjunto de elementos que se va a quitar del conjunto de elementos coincidentes de jQuery. + /// + /// + + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + /// + /// Quita todos los elementos del conjunto de elementos coincidentes que no + /// superan el filtro especificado. Este método se usa para restringir + /// los resultados de una búsqueda. + /// }) + /// Parte de DOM/Traversing + /// + /// + /// + /// Función que se usa para el filtrado + /// + /// + + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + /// + /// Compara la selección actual con una expresión y devuelve true + /// si al menos un elemento de la selección coincide con la expresión especificada. + /// Devuelve false si no hay ningún elemento coincidente o si la expresión no es válida. + /// filter(String) se utiliza internamente y, por tanto, todas las reglas que se aplican allí + /// también se aplican aquí. + /// Parte de DOM/Traversing + /// + /// + /// + /// Expresión con la que se va a filtrar + /// + + return !!selector && jQuery.filter( selector, this ).length > 0; + }, + + closest: function( selectors, context ) { + /// + /// Obtener un conjunto de elementos que contenga el elemento primario más cercano que coincida con el selector especificado, incluido el elemento inicial. + /// + /// + /// Cadena que contiene una expresión de selector con la que deben coincidir los elementos. + /// + /// + /// Elemento DOM en el que se puede encontrar un elemento coincidente. Si no se pasa contexto, + /// se usará el contexto del conjunto jQuery. + /// + /// + + if ( jQuery.isArray( selectors ) ) { + var ret = [], cur = this[0], match, matches = {}, selector; + + if ( cur && selectors.length ) { + for ( var i = 0, l = selectors.length; i < l; i++ ) { + selector = selectors[i]; + + if ( !matches[selector] ) { + matches[selector] = jQuery.expr.match.POS.test( selector ) ? + jQuery( selector, context || this.context ) : + selector; + } + } + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( selector in matches ) { + match = matches[selector]; + + if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) { + ret.push({ selector: selector, elem: cur }); + delete matches[selector]; + } + } + cur = cur.parentNode; + } + } + + return ret; + } + + var pos = jQuery.expr.match.POS.test( selectors ) ? + jQuery( selectors, context || this.context ) : null; + + return this.map(function( i, cur ) { + while ( cur && cur.ownerDocument && cur !== context ) { + if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) { + return cur; + } + cur = cur.parentNode; + } + return null; + }); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + /// + /// Busca cada elemento coincidente del objeto y devuelve + /// el índice del elemento, si se encuentra, empezando por cero. + /// Devuelve -1 si no se encuentra el objeto. + /// Parte del núcleo + /// + /// + /// + /// Objeto que se va a buscar + /// + + if ( !elem || typeof elem === "string" ) { + return jQuery.inArray( this[0], + // If it receives a string, the selector is used + // If it receives nothing, the siblings are used + elem ? jQuery( elem ) : this.parent().children() ); + } + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + /// + /// Agrega uno o varios elementos al conjunto de elementos coincidentes. + /// Parte de DOM/Traversing + /// + /// + /// Cadena que contiene una expresión de selector con la que deben coincidir elementos adicionales. + /// + /// + /// Agregar algunos elementos con raíz en el contexto especificado. + /// + /// + + var set = typeof selector === "string" ? + jQuery( selector, context || this.context ) : + jQuery.makeArray( selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + /// + /// Agrega la selección anterior a la actual. + /// + /// + + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + siblings: function( elem ) { + return jQuery.sibling( elem.parentNode.firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, slice.call(arguments).join(",") ); + }; +}); + +jQuery.fn[ "parentsUntil" ] = function( until, selector ) { + /// + /// Obtener los antecesores de cada elemento en el conjunto actual de elementos coincidentes, hasta + /// (sin incluirlo) el elemento coincidente con el selector. + /// + /// + /// Cadena que contiene una expresión de selector para indicar dónde detener la búsqueda de + /// coincidencias en los elementos antecesores. + /// + /// + + var fn = function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + } + + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( "parentsUntil" ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( "parentsUntil" ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, "parentsUntil", slice.call(arguments).join(",") ); +}; + +jQuery.fn[ "nextUntil" ] = function( until, selector ) { + /// + /// Obtener todos los elementos del mismo nivel de cada elemento hasta (sin incluirlo) el elemento coincidente + /// con el selector. + /// + /// + /// Cadena que contiene una expresión de selector para indicar dónde detener la búsqueda + /// de coincidencias en los elementos siguientes del mismo nivel. + /// + /// + + var fn = function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + } + + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( "nextUntil" ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( "nextUntil" ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, "nextUntil", slice.call(arguments).join(",") ); +}; + +jQuery.fn[ "prevUntil" ] = function( until, selector ) { + /// + /// Obtener todos los elementos anteriores del mismo nivel de cada elemento hasta (sin incluirlo) el elemento coincidente + /// con el selector. + /// + /// + /// Cadena que contiene una expresión de selector para indicar dónde detener la búsqueda + /// de coincidencias de elementos anteriores del mismo nivel. + /// + /// + + var fn = function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + } + + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( "prevUntil" ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( "prevUntil" ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, "prevUntil", slice.call(arguments).join(",") ); +}; + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + /// + /// Este miembro es solo para uso interno. + /// + /// + + var matched = [], cur = elem[dir]; + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + /// + /// Este miembro es solo para uso interno. + /// + /// + + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + /// + /// Este miembro es solo para uso interno. + /// + /// + + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); +var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /(<([\w:]+)[^>]*?)\/>/g, + rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i, + rtagName = /<([\w:]+)/, + rtbody = /"; + }, + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
", "
" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + col: [ 2, "", "
" ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }; + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and + + diff --git a/diario.aspx.vb b/diario.aspx.vb new file mode 100644 index 0000000..03be9e1 --- /dev/null +++ b/diario.aspx.vb @@ -0,0 +1,116 @@ +Option Strict On +Imports System.IO + +Partial Class diario + Inherits System.Web.UI.Page + Private dias(), nombredias() As String + Private num_dias As String = System.Configuration.ConfigurationManager.AppSettings("num_diasPDF") + Private d_fecha As Date + Private ListaDirectorios, ListaDirectoriosObtenidos As New ArrayList + Private str_dir() As String + Public str_vinculos, str_vinculos1, str_cuerpo As String + Private sitio_pdfs As String = System.Configuration.ConfigurationManager.AppSettings("sitio_pdfs") + + + Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + ReDim dias(CInt(num_dias) - 1) + ReDim nombredias(CInt(num_dias) - 1) + If Not IsPostBack Then + Dim i As Integer + For i = 0 To CInt(num_dias) - 1 + 'dias(i) = Date.Now.AddDays(-i).ToString("yyyyMMdd") + nombredias(i) = Date.Now.AddDays(-i).ToString("dd/MM/yyyy") + Next + Drop_fecha.DataSource = nombredias + Drop_fecha.DataBind() + If CInt(Date.Now.ToString("HH")) < 3 Then + d_fecha = Date.Now.AddDays(-1) '' si es antes de las 3 AM, muestra ayer + Else + d_fecha = Date.Now.AddDays(0) + End If + Dim str_fecha As String = d_fecha.ToString("yyyyMMdd") + ' + ' VeoDirectorios(str_fecha) + If Not Request.Params("fecha") Is Nothing Then + If Request.Params("fecha").ToString.Length = 8 Then + str_fecha = Request.Params("fecha").ToString + End If + End If + VeoDirectorios2(str_fecha) + End If + End Sub + + Private Sub VeoDirectorios2(ByVal str_fecha As String) + ''str_fecha = "20121014" ''ojojojojojo + 'admin.Errores("ServerMapPath " + Server.MapPath("\medios\pdfx\" + str_fecha)) + If Directory.Exists(Server.MapPath("\medios\pdfx\" + str_fecha)) Then + Dim str_file As String = "" + Dim n_suples As Integer = 0 + For Each File In Directory.GetFiles(Server.MapPath("\medios\pdfx\" + str_fecha), "*.pdf") + If File.IndexOf("1.pdf") > 0 Then + str_cuerpo = "
" _ + + "
" + str_vinculos = "" + str_vinculos1 = "" + Else + str_file = File.Substring(File.LastIndexOf("\") + 1, File.Length - File.LastIndexOf("\") - 1) + If n_suples < 3 Then + str_vinculos += "
" + n_suples += 1 + Else + str_vinculos1 += "
" + n_suples += 1 + End If + End If + Next + If str_vinculos.Length > 1 Then + str_vinculos = "
" + str_vinculos + "
" _ + + "
" + End If + If str_vinculos1.Length > 1 Then + str_vinculos1 = "
" + str_vinculos1 + "
" _ + + "
" + End If + Else + ' Pruebo con el día anterior: + str_fecha = func.fecha1(str_fecha, -1).ToString("yyyyMMdd") + Dim str_file As String = "" + Dim n_suples As Integer = 0 + For Each File In Directory.GetFiles(Server.MapPath("\medios\pdfx\" + str_fecha), "*.pdf") + If File.IndexOf("1.pdf") > 0 Then + str_cuerpo = "
" _ + + "
" + str_vinculos = "" + str_vinculos1 = "" + Else + str_file = File.Substring(File.LastIndexOf("\") + 1, File.Length - File.LastIndexOf("\") - 1) + If n_suples < 3 Then + str_vinculos += "
" + n_suples += 1 + Else + str_vinculos1 += "
" + n_suples += 1 + End If + End If + Next + If str_vinculos.Length > 1 Then + str_vinculos = "
" + str_vinculos + "
" _ + + "
" + End If + If str_vinculos1.Length > 1 Then + str_vinculos1 = "
" + str_vinculos1 + "
" _ + + "
" + End If + End If '' Directory.Exists + End Sub + + + Protected Sub Drop_fecha_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Drop_fecha.SelectedIndexChanged + Dim str_fecha As String = Drop_fecha.SelectedValue + Dim fecha As Date = CDate(str_fecha) + str_fecha = fecha.ToString("yyyyMMdd") + admin.Errores("drop_fecha_indexchanged " + str_fecha) + 'VeoDirectorios(str_fecha) + VeoDirectorios2(str_fecha) + End Sub +End Class \ No newline at end of file diff --git a/funebres.aspx b/funebres.aspx new file mode 100644 index 0000000..3ac7ee8 --- /dev/null +++ b/funebres.aspx @@ -0,0 +1,88 @@ +<%@ Page Language="VB" AutoEventWireup="false" CodeFile="funebres.aspx.vb" Inherits="funebres" %> + + + + + + Avisos Fúnebres + + + + + +
+ + + <%=nombres%> + + + <%--
+
+
+ +
+
+
21 de junio
+

INES CALISSE DE FABRIS

+

(Q.E.P.D.) Falleció el 20/06/2023.- Sus hijos Gerardo, Fernando [...]

+
+
+
+ +
+
+
+ +
+
+
21 de junio
+

MARIO MARTIN FERNANDEZ

+

(Q.E.P.D.) Falleció el 20/06/2023.- Su esposa: Cristina Zamarripa, [...]

+
+
+
+ +
+
+
+ +
+
+
21 de junio
+

JUAN REDA

+

(Q.E.P.D.) Falleció el 20/06/2023.- Sus hijos: Néstor, Miguel, Karina, [...]

+
+
+
+ +
+
+
+ +
+
+
21 de junio
+

JULIETA VERGARA

+

(Q.E.P.D.) Falleció el 19/06/2023.- Sus padres Liliana y José, [...]

+
+
+
+ +
+
+
+ +
+
+
21 de junio
+

EDUARDO BIGLIARDI

+

(Q.E.P.D.) Falleció el 18/06/2023.- Bibi Magnoni y flia. acompañan [...]

+
+
+
--%> + + + +
+ + diff --git a/funebres.aspx.vb b/funebres.aspx.vb new file mode 100644 index 0000000..1482999 --- /dev/null +++ b/funebres.aspx.vb @@ -0,0 +1,163 @@ +Option Strict On + +Imports System.Data +Imports System.Data.SqlClient +Imports System.Web +Imports Microsoft.VisualBasic +Imports System.IO +Imports System.Web.Caching +Imports System.Net + +Partial Class funebres + Inherits System.Web.UI.Page + Private d_fecha As Date + Public nombres, f1, f2, simbolo As String + Private DBReader, DBReader1 As SqlDataReader + + Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + + d_fecha = Date.Now.AddDays(0) + f1 = d_fecha.ToString("yyyyMMdd") + DBReader = Clasi3.CheckFunebresNuevo(f1, 1, 1, True) + If Not DBReader Is Nothing Then + If DBReader.HasRows Then + DBReader.Close() + muestra_avisos_nuevo(1) + Else + DBReader = Clasi3.CheckFunebresNuevo(f1, 2, 1, True) + If Not DBReader Is Nothing Then + If DBReader.HasRows Then + DBReader.Close() + muestra_avisos_nuevo(2) + End If + End If + End If + + End If + End Sub + Private Sub muestra_avisos_nuevo(ByVal int_tipo As Integer) + + + + Dim tipo As String = "SEPELIOS" + Dim str_apellido_ant As String = "" + + Dim dbreader_avi As SqlDataReader = Clasi3.CheckFunebresNuevo(f1, int_tipo, 1, True) ''el 1 es para EL DIA + If dbreader_avi.Read Then + nombres = "
    " + Dim simbolo As Integer = CInt(dbreader_avi.Item("simbolo")) + Dim str_simbolo As String = "" + Select Case simbolo + Case 1 + str_simbolo = "" + Case 2 + str_simbolo = "" + Case 3 + str_simbolo = "" + Case 4 + str_simbolo = "" + End Select + Dim str_fallecio As String = "" + Dim str_pre As String = "" + Dim str_post As String = "" + Dim str_qepd As String = "" + Dim str_apellido As String = "" + Dim str_texto As String = "" + + If dbreader_avi.Item("fallecio").ToString.Length > 0 Then + str_fallecio = " " + dbreader_avi.Item("fallecio").ToString + End If + If dbreader_avi.Item("pre").ToString.Length > 0 Then + str_pre = dbreader_avi.Item("pre").ToString + " " + End If + If dbreader_avi.Item("post").ToString.Length > 0 Then + str_post = " " + dbreader_avi.Item("post").ToString + End If + + If dbreader_avi.Item("qepd").ToString.Length > 0 Then + str_qepd = dbreader_avi.Item("qepd").ToString + If dbreader_avi.Item("qepd").ToString = "(ZL)" Then + str_qepd = "(Z'L)" + End If + str_qepd = " " + str_qepd + End If + + If dbreader_avi.Item("apellido").ToString.Length > 0 Then + str_apellido = " " + dbreader_avi.Item("apellido").ToString + str_apellido_ant = dbreader_avi.Item("apellidoreal").ToString + End If + + If dbreader_avi.Item("texto").ToString.Length > 49 Then + str_texto = dbreader_avi.Item("texto").ToString.Substring(0, 50) + Else + str_texto = dbreader_avi.Item("texto").ToString + End If + nombres += "
    " + str_simbolo + "
    " + + Else + nombres = "" + Exit Sub + End If + While dbreader_avi.Read + If str_apellido_ant.Trim <> dbreader_avi.Item("apellidoreal").ToString.Trim Then + Dim simbolo As Integer = CInt(dbreader_avi.Item("simbolo")) + Dim str_simbolo As String = "" + Select Case simbolo + Case 1 + str_simbolo = "" + Case 2 + str_simbolo = "" + Case 3 + str_simbolo = "" + Case 4 + str_simbolo = "" + End Select + Dim str_fallecio As String = "" + Dim str_pre As String = "" + Dim str_post As String = "" + Dim str_qepd As String = "" + Dim str_apellido As String = "" + Dim str_texto As String = "" + + If dbreader_avi.Item("fallecio").ToString.Length > 0 Then + str_fallecio = " " + dbreader_avi.Item("fallecio").ToString + End If + If dbreader_avi.Item("pre").ToString.Length > 0 Then + str_pre = dbreader_avi.Item("pre").ToString + " " + End If + If dbreader_avi.Item("post").ToString.Length > 0 Then + str_post = " " + dbreader_avi.Item("post").ToString + End If + + If dbreader_avi.Item("qepd").ToString.Length > 0 Then + str_qepd = dbreader_avi.Item("qepd").ToString + If dbreader_avi.Item("qepd").ToString = "(ZL)" Then + str_qepd = "(Z'L)" + End If + str_qepd = " " + str_qepd + End If + + If dbreader_avi.Item("apellido").ToString.Length > 0 Then + str_apellido = " " + dbreader_avi.Item("apellido").ToString + str_apellido_ant = dbreader_avi.Item("apellidoreal").ToString + End If + + If dbreader_avi.Item("texto").ToString.Length > 49 Then + str_texto = dbreader_avi.Item("texto").ToString.Substring(0, 50) + Else + str_texto = dbreader_avi.Item("texto").ToString + End If + + nombres += "
    " + str_simbolo + "
    " + End If + + End While + dbreader_avi.Close() + nombres += "
" + + End Sub +End Class diff --git a/horoscopo.aspx b/horoscopo.aspx new file mode 100644 index 0000000..ddd3863 --- /dev/null +++ b/horoscopo.aspx @@ -0,0 +1,24 @@ +<%@ Page Language="VB" AutoEventWireup="false" CodeFile="horoscopo.aspx.vb" Inherits="horoscopo" %> + + + + + +<%-- Horóscopo Zodíaco - <%=ff%>--%> + + + +
+
+ <%=horoscopo %> +
+
+ Haga clic aquí para saber cuáles son sus números de la suerte +
+
+ Si Ud. nació un día como hoy
+ <%=comohoy%> +
+
+ + diff --git a/horoscopo.aspx.vb b/horoscopo.aspx.vb new file mode 100644 index 0000000..d8b9074 --- /dev/null +++ b/horoscopo.aspx.vb @@ -0,0 +1,123 @@ +Option Strict On +Imports System.Data +Imports System.Data.SqlClient +Imports System.Globalization + +Partial Class horoscopo + Inherits System.Web.UI.Page + + Public horoscopo, comohoy, ff As String + Private dreader As SqlDataReader + Private hoy As Date = Now + Private fechahoy, f1, f2 As String + Private sitio As String = System.Configuration.ConfigurationManager.AppSettings("sitio") + Private cultura As New CultureInfo("es-ES", True) + + Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + + Dim d_fecha As Date + d_fecha = Date.Now '' noticias.UltimaFecha(30, Date.Now.ToString("yyyyMMdd")) '' 30 es horóscopo + '' + If d_fecha.ToString("MMdd") = "1225" Or d_fecha.ToString("MMdd") = "0101" Or d_fecha.ToString("MMdd") = "0501" Then ' días feriados + d_fecha = d_fecha.AddDays(-1) 'día anterior + End If + + + ''!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ff = d_fecha.ToString("D", cultura) + ff = ff.Substring(0, ff.IndexOf(",")) + ff = ff + " | " + d_fecha.ToString("dd.MM.yyyy") + + horoscopo = "" + + fechahoy = d_fecha.ToString("MMdd") + Dim id As Integer = 0 + If fechahoy < "0121" Or fechahoy > "1221" Then ''determino el id correspondiente al signo actual" Then + id = 9 ''con el cambio de año se hace lío así que lo fijo + Else + dreader = func.ver_signo(fechahoy) + If dreader.Read Then + id = CInt(dreader.Item("id")) ''determino el id correspondiente al signo actual + End If + dreader.Close() + End If + '' + '' el año es par o impar ? + Dim paridad As Integer = CInt(Date.Now.ToString("yyyy")) Mod 2 '' para aprovechar los 2 años de datos que tenemos + Dim diferencia As Integer + If paridad > 0 Then + '' es impar + diferencia = 2007 - CInt(Date.Now.ToString("yyyy")) + Else + '' es año par + diferencia = 2008 - CInt(Date.Now.ToString("yyyy")) + End If + '' esto tiene en cuenta que hay "horóscopo" desde el 27/03/2007 hasta 10/11/2009 + f1 = d_fecha.AddYears(diferencia).AddMonths(3).ToString("yyyyMMdd") + f2 = d_fecha.AddYears(diferencia).AddMonths(3).AddDays(1).ToString("yyyyMMdd") + dreader = func.lee_horos(f1, f2) + Dim hor(), Horos As String + Horos = "" + If dreader.Read Then + Horos = CStr(dreader.Item("texto")) '' lee el archivo en BD correspondiente a hoy + End If + dreader.Close() + Horos = Horos.Replace(" ", "\") + ''Horos = Horos.Replace(Chr(10) + Chr(10), "\") + hor = Horos.Split(CChar("\")) ''divide el archivo horos + + Dim signos(11), textos(11), signosresumido(11) As String + + Dim i As Integer = 0 + Dim largo As Integer = hor.Length + comohoy = func.ConvertUTF(hor(largo - 1)) + + + While CBool(i <= largo - 3) + If CBool(i / 2 <> id) Then + + dreader = func.lee_signos(CInt(i / 2)) + If dreader.Read Then + + textos(CInt(i / 2)) = hor(i + 1) + signos(CInt(i / 2)) = dreader.Item("nombre").ToString + " (" + dreader.Item("texto").ToString + ")" + signosresumido(CInt(i / 2)) = dreader.Item("nombre").ToString + + horoscopo += "
" + signos(CInt(i / 2)) + "
" _ + + "
" _ + + "" _ + + textos(CInt(i / 2)) + "
" + + End If + dreader.Close() + End If + + i += 2 + End While + + i = 2 * id '' corrección + + dreader = func.lee_signos(CInt(i / 2)) + If dreader.Read Then + + textos(CInt(i / 2)) = hor(i + 1) + signos(CInt(i / 2)) = dreader.Item("nombre").ToString + " (" + dreader.Item("texto").ToString + ")" + signosresumido(CInt(i / 2)) = dreader.Item("nombre").ToString + + + horoscopo = "
" + signos(CInt(i / 2)) + "
" _ + + "
" _ + + "" _ + + textos(CInt(i / 2)) + "
" + horoscopo + + End If + dreader.Close() + horoscopo = func.ConvertUTF(horoscopo) + + + End Sub + + +End Class diff --git a/img/cruz.png b/img/cruz.png new file mode 100644 index 0000000..b720fb6 Binary files /dev/null and b/img/cruz.png differ diff --git a/img/estrella.png b/img/estrella.png new file mode 100644 index 0000000..6f75e4d Binary files /dev/null and b/img/estrella.png differ diff --git a/mapas/ArgentinaProvincias_4_lista.svg b/mapas/ArgentinaProvincias_4_lista.svg new file mode 100644 index 0000000..bd6bdd4 --- /dev/null +++ b/mapas/ArgentinaProvincias_4_lista.svg @@ -0,0 +1,515 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mapas/BuenosAiresDistrito.svg b/mapas/BuenosAiresDistrito.svg new file mode 100644 index 0000000..b70faf4 --- /dev/null +++ b/mapas/BuenosAiresDistrito.svg @@ -0,0 +1,1271 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mapas/BuenosAiresPartidos_4_lista.svg b/mapas/BuenosAiresPartidos_4_lista.svg new file mode 100644 index 0000000..8c4c7d3 --- /dev/null +++ b/mapas/BuenosAiresPartidos_4_lista.svg @@ -0,0 +1,1272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mapas/ConurbanoDistrito.svg b/mapas/ConurbanoDistrito.svg new file mode 100644 index 0000000..dea0a22 --- /dev/null +++ b/mapas/ConurbanoDistrito.svg @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mapas/PartidosColoreado_2_lista.svg b/mapas/PartidosColoreado_2_lista.svg new file mode 100644 index 0000000..4b3d7dd --- /dev/null +++ b/mapas/PartidosColoreado_2_lista.svg @@ -0,0 +1,1272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mapas/PartidosColoreado_3_lista.svg b/mapas/PartidosColoreado_3_lista.svg new file mode 100644 index 0000000..9f4221f --- /dev/null +++ b/mapas/PartidosColoreado_3_lista.svg @@ -0,0 +1,1272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mapas/PartidosColoreado_DipNacBA.svg b/mapas/PartidosColoreado_DipNacBA.svg new file mode 100644 index 0000000..edee05b --- /dev/null +++ b/mapas/PartidosColoreado_DipNacBA.svg @@ -0,0 +1,1272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mapas/PartidosColoreado_DipNac_lista.svg b/mapas/PartidosColoreado_DipNac_lista.svg new file mode 100644 index 0000000..8976376 --- /dev/null +++ b/mapas/PartidosColoreado_DipNac_lista.svg @@ -0,0 +1,1272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mapas/PartidosColoreado_resultados.svg b/mapas/PartidosColoreado_resultados.svg new file mode 100644 index 0000000..7960755 --- /dev/null +++ b/mapas/PartidosColoreado_resultados.svg @@ -0,0 +1,1272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mapas/PartidosColoreado_resultadosGobernador.svg b/mapas/PartidosColoreado_resultadosGobernador.svg new file mode 100644 index 0000000..562a64f --- /dev/null +++ b/mapas/PartidosColoreado_resultadosGobernador.svg @@ -0,0 +1,1272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mapas/PartidosColoreado_resultadosIntendente.svg b/mapas/PartidosColoreado_resultadosIntendente.svg new file mode 100644 index 0000000..d01802b --- /dev/null +++ b/mapas/PartidosColoreado_resultadosIntendente.svg @@ -0,0 +1,1272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mapas/PartidosColoreado_resultadosPresidente.svg b/mapas/PartidosColoreado_resultadosPresidente.svg new file mode 100644 index 0000000..865e589 --- /dev/null +++ b/mapas/PartidosColoreado_resultadosPresidente.svg @@ -0,0 +1,1272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mapas/PartidosConuColoreado_2_lista.svg b/mapas/PartidosConuColoreado_2_lista.svg new file mode 100644 index 0000000..9759809 --- /dev/null +++ b/mapas/PartidosConuColoreado_2_lista.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mapas/PartidosConuColoreado_3_lista.svg b/mapas/PartidosConuColoreado_3_lista.svg new file mode 100644 index 0000000..9759809 --- /dev/null +++ b/mapas/PartidosConuColoreado_3_lista.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mapas/PartidosConuColoreado_DipNacConu.svg b/mapas/PartidosConuColoreado_DipNacConu.svg new file mode 100644 index 0000000..e985e2b --- /dev/null +++ b/mapas/PartidosConuColoreado_DipNacConu.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mapas/PartidosMuniColoreado_2_lista.svg b/mapas/PartidosMuniColoreado_2_lista.svg new file mode 100644 index 0000000..c636bdc --- /dev/null +++ b/mapas/PartidosMuniColoreado_2_lista.svg @@ -0,0 +1,10005 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mapas/PartidosMuniColoreado_3_lista.svg b/mapas/PartidosMuniColoreado_3_lista.svg new file mode 100644 index 0000000..59eac8d --- /dev/null +++ b/mapas/PartidosMuniColoreado_3_lista.svg @@ -0,0 +1,10005 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mapas/ProvinciasColoreado_2_lista.svg b/mapas/ProvinciasColoreado_2_lista.svg new file mode 100644 index 0000000..df545fc --- /dev/null +++ b/mapas/ProvinciasColoreado_2_lista.svg @@ -0,0 +1,515 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mapas/ProvinciasColoreado_3_lista.svg b/mapas/ProvinciasColoreado_3_lista.svg new file mode 100644 index 0000000..6f97bac --- /dev/null +++ b/mapas/ProvinciasColoreado_3_lista.svg @@ -0,0 +1,515 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mapas/mapaargentina.svg b/mapas/mapaargentina.svg new file mode 100644 index 0000000..25e398b --- /dev/null +++ b/mapas/mapaargentina.svg @@ -0,0 +1,514 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/medios/20240306/1.jpg b/medios/20240306/1.jpg new file mode 100644 index 0000000..afad4c4 Binary files /dev/null and b/medios/20240306/1.jpg differ diff --git a/medios/20240306/1.pdf b/medios/20240306/1.pdf new file mode 100644 index 0000000..cf466f4 Binary files /dev/null and b/medios/20240306/1.pdf differ diff --git a/medios/20240306/2.jpg b/medios/20240306/2.jpg new file mode 100644 index 0000000..3d3f6fb Binary files /dev/null and b/medios/20240306/2.jpg differ diff --git a/medios/20240306/2.pdf b/medios/20240306/2.pdf new file mode 100644 index 0000000..44ec023 Binary files /dev/null and b/medios/20240306/2.pdf differ diff --git a/suerte.aspx b/suerte.aspx new file mode 100644 index 0000000..2b12fa9 --- /dev/null +++ b/suerte.aspx @@ -0,0 +1,17 @@ +<%@ Page Language="VB" AutoEventWireup="false" CodeFile="suerte.aspx.vb" Inherits="suerte" %> + + + + + +<%-- Suerte y números - <%=ff%>--%> + + + +
+
+ <%=suertenum %> +
+
+ + diff --git a/suerte.aspx.vb b/suerte.aspx.vb new file mode 100644 index 0000000..4cd2e64 --- /dev/null +++ b/suerte.aspx.vb @@ -0,0 +1,143 @@ +Option Strict On + +Imports System.Data +Imports System.Data.SqlClient +Imports System.Globalization + +Partial Class suerte + Inherits System.Web.UI.Page + + Public suertenum, ff, chinum As String + Private dreader As SqlDataReader + Private hoy As Date = Now + Private fechahoy, f1, f2 As String + Private sitio As String = System.Configuration.ConfigurationManager.AppSettings("sitio") + Private cultura As New CultureInfo("es-ES", True) + + Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + + suertenum = "" + + Dim d_fecha As Date + d_fecha = Date.Now ''noticias.UltimaFecha(32, Date.Now.ToString("yyyyMMdd")) '' 32 es suerte + + If d_fecha.ToString("MMdd") = "1225" Or d_fecha.ToString("MMdd") = "0101" Or d_fecha.ToString("MMdd") = "0501" Then ' días feriados + d_fecha = d_fecha.AddDays(-1) 'día anterior + End If + + + ''!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ff = d_fecha.ToString("D", cultura) + ff = ff.Substring(0, ff.IndexOf(",")) + ff = ff + " | " + d_fecha.ToString("dd.MM.yyyy") + + + fechahoy = d_fecha.ToString("MMdd") + Dim id As Integer = 0 + If fechahoy < "0121" Or fechahoy > "1221" Then ''determino el id correspondiente al signo actual + id = 9 ''con el cambio de año se hace lío así que lo fijo + Else + dreader = func.ver_signo(fechahoy) + If dreader.Read Then + id = CInt(dreader.Item("id")) ''determino el id correspondiente al signo actual + End If + dreader.Close() + End If + '' + '' el año es par o impar ? + Dim paridad As Integer = CInt(Date.Now.ToString("yyyy")) Mod 2 '' para aprovechar los 2 años de datos que tenemos + Dim diferencia As Integer + If paridad > 0 Then + '' es impar + diferencia = 2007 - CInt(Date.Now.ToString("yyyy")) + Else + '' es año par + diferencia = 2008 - CInt(Date.Now.ToString("yyyy")) + End If + '' esto tiene en cuenta que hay "suerte" desde el 27/03/2007 hasta 10/11/2009 + f1 = d_fecha.AddYears(diferencia).AddMonths(3).ToString("yyyyMMdd") + f2 = d_fecha.AddYears(diferencia).AddMonths(3).AddDays(1).ToString("yyyyMMdd") + '' + dreader = func.lee_suerte(f1, f2) + Dim sue(), suerte As String + suerte = "" + If dreader.Read Then + suerte = CStr(dreader.Item("texto")) '' lee el archivo en BD correspondiente a hoy + End If + dreader.Close() + suerte = suerte.Trim + suerte = suerte.Replace(" ", "\") + ''suerte = suerte.Replace(Chr(10) + Chr(10), "\") + + sue = suerte.Split(CChar("\")) ''divide el archivo horos + + Dim j As Integer = 0 + Dim n_pos As Integer + If sue(j) = "" Then + suertenum = "" + Else + For j = 0 To 11 + n_pos = sue(j).IndexOf(" ") + If n_pos > 0 Then + sue(j) = sue(j).Remove(0, n_pos + 1) + End If + + Next + + Dim signos(11), textos(11), signosresumido(11) As String + + Dim i As Integer = 0 + Dim largo As Integer = sue.Length + + While CBool(i <= largo - 1) + If CBool(i <> id) Then + + dreader = func.lee_signos(CInt(i)) + If dreader.Read Then + + textos(CInt(i)) = sue(i) + signos(CInt(i)) = dreader.Item("nombre").ToString + " (" + dreader.Item("texto").ToString + ")" + signosresumido(CInt(i)) = dreader.Item("nombre").ToString + + suertenum += "

" + signos(CInt(i)) + "

" _ + + "
" _ + + "" _ + + textos(CInt(i)) + "

" + + + End If + dreader.Close() + End If + i += 1 + + End While + + i = id + + dreader = func.lee_signos(CInt(i)) + If dreader.Read Then + + textos(CInt(i)) = sue(i) + signos(CInt(i)) = dreader.Item("nombre").ToString + " (" + dreader.Item("texto").ToString + ")" + signosresumido(CInt(i)) = dreader.Item("nombre").ToString + + suertenum = "

" + signos(CInt(i)) + "

" _ + + "
" _ + + "" _ + + textos(CInt(i)) + "
" + suertenum + + End If + dreader.Close() + suertenum = "
Conocé los números de la suerte del día de hoy de acuerdo a tu signo del zodíaco. " + _ + "También podés consultar el horóscopo zodiacal" + _ + " y el horóscopo chino.
" + func.ConvertUTF(suertenum) + + + End If + + End Sub + + +End Class diff --git a/tapa.aspx b/tapa.aspx new file mode 100644 index 0000000..921f769 --- /dev/null +++ b/tapa.aspx @@ -0,0 +1,30 @@ +<%@ Page Language="VB" AutoEventWireup="false" CodeFile="tapa.aspx.vb" Inherits="tapa" %> + + + + + + + + + +
+
+
Edición electrónica
+
FORMATO PARA SUSCRIPTORES FULL
+ /1.jpg" /> + +
+
+ + diff --git a/tapa.aspx.vb b/tapa.aspx.vb new file mode 100644 index 0000000..fb36865 --- /dev/null +++ b/tapa.aspx.vb @@ -0,0 +1,12 @@ +'Option Strict On + +Imports System.Data +Imports System.Data.SqlClient +Imports System.Globalization +Partial Class tapa + Inherits System.Web.UI.Page + Private dreader As SqlDataReader + Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + + End Sub +End Class