diff options
author | navid <navid@ef72aa8b-4018-0410-8976-d6e080ef94d8> | 2007-11-22 10:40:27 +0000 |
---|---|---|
committer | navid <navid@ef72aa8b-4018-0410-8976-d6e080ef94d8> | 2007-11-22 10:40:27 +0000 |
commit | e2ea89dbbe1b1731ba4eda7fbe40ea315594a1c9 (patch) | |
tree | affd667e6f91c207a1c497ad895f336f0f386f59 /src/extras | |
parent | e60df25b9b22ec1bf78d8d95ca7673d559f13333 (diff) | |
download | sos-e2ea89dbbe1b1731ba4eda7fbe40ea315594a1c9.tar.gz |
merged navid-dev back into trunk, see spec file for details
git-svn-id: svn+ssh://svn.fedorahosted.org/svn/sos/trunk@457 ef72aa8b-4018-0410-8976-d6e080ef94d8
Diffstat (limited to 'src/extras')
58 files changed, 6342 insertions, 511 deletions
diff --git a/src/extras/htmlog b/src/extras/htmlog deleted file mode 100755 index 87d9e9c1..00000000 --- a/src/extras/htmlog +++ /dev/null @@ -1,473 +0,0 @@ -#!/usr/bin/env python - -#from optparse import OptionParser, Option -import time, sys, os, glob -import getopt, re - -#__cmdParser__ = OptionParser() -#__cmdParser__.add_option("-i", "--input", action="append", -# dest="logfiles", type="string", metavar = "FILE", -# help="system log to parse") -#__cmdParser__.add_option("-v", "--verbose", action="count", -# dest="verbosity", -# help="How obnoxious we're being about telling the user what we're doing.") -#(__cmdLineOpts__, __cmdLineArgs__)=__cmdParser__.parse_args() - -class htmlgen_class: - - def __init__(self): - self.html_fname_base = "/tmp/something" - self.page_num = 0 - self.page_line = 0 - self.page_fp = None - self.cur_time = None - self.old_time = None - - self.summary_fp = open(self.html_fname_base + ".html", "w") - self.summary_fp.write("<html><body><ul>") - - def new_page(self): - - # close previous page - if self.page_fp: - self.close_page() - - self.page_fp = open( "%s_%d.html" % (self.html_fname_base, self.page_num), "w") - self.page_num += 1 - self.page_line = 0 - - self.page_fp.write("""<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" - "http://www.w3.org/TR/html4/strict.dtd"> - -<html> -<head> -<title></title> -<style type="text/css"> -<!-- - -body { - font: normal 11px auto "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; - color: #4f6b72; - background: #E6EAE9; -} - -a { - color: #c75f3e; -} - -#mytable { - width: 97%; - padding: 0; - margin: 0; -} - -caption { - padding: 0 0 5px 0; - width: 97%; - font: italic 11px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; - text-align: right; -} - -th { - font: bold 11px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; - color: #4f6b72; - letter-spacing: 2px; - text-transform: uppercase; - text-align: left; - padding: 6px 6px 6px 12px; - background: #a50000 url(images/bg_header.jpg) no-repeat; - color: white; -} - -th.nobg { - border-top: 0; - border-left: 0; - border-right: 1px solid #C1DAD7; - background: none; - color: black; -} - -td { - border-right: 1px solid #C1DAD7; - border-bottom: 1px solid #C1DAD7; - background: #fff; - padding: 6px 6px 6px 12px; - color: #4f6b72; - letter-spacing: -1px; - white-space:pre-wrap; - font-family: monospace; -} - -pre { - white-space: pre-wrap; /* css-3 */ - white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - word-wrap: break-word; /* Internet Explorer 5.5+ */ -} - -td.alt { - background: #ffbaba; - color: #797268; -} - -th.newday { - text-align: right; - padding: 2px; -} - -th.spec { - border-left: 1px solid #C1DAD7; - border-right: 1px solid #C1DAD7; - border-top: 0; - background: #fff url(images/bullet1.gif) no-repeat; - font: bold 10px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; - color: #797268; -} - -th.specalt { - border-left: 1px solid #C1DAD7; - border-right: 1px solid #C1DAD7; - border-top: 0; - background: #cecfce url(images/bullet2.gif) no-repeat; - font: bold 10px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; - color: #797268; -} - ---> -</style> - -</head> -<body> - -<table id="mytable" cellspacing="0" summary="The technical specifications of the Apple PowerMac G5 series"> -<caption>Generated by SOS htmlogger 1.0 on March 16th 2008</caption> -""") - - def new_line(self, new_time, events = []): - self.old_time = self.cur_time - self.cur_time = new_time - - # close previous line - if self.page_line > 0: - self.page_fp.write("</TR>") - - if self.page_line == 0 or self.page_line % 200 == 0: - self.page_fp.write("""<tr><th scope="col" abbr="Date/Time" class="nobg">Time</th><th scope="col" abbr="node-1">node-1</th><th scope="col" abbr="node-2">node-2</th><th scope="col" abbr="node-3">node-3</th></tr>""") - - if self.page_line == 0 or self.page_line % 200 == 0 or time.strftime("%b %d", self.old_time) != time.strftime("%b %d", new_time): - self.page_fp.write("""<tr><th scope="row" class="newday" colspan=4>%s</th></tr>""" % time.strftime("%A, %B %d", new_time)) - - if self.page_line % 2 == 0: row_class = "spec" - else: row_class = "specalt" - - if len(events) > 0: - stime = """<a name="row_%d">%s</a>""" % (self.page_line, time.strftime("%H:%M:%S", new_time)) - for event in events: - self.summary_fp.write('<li><a href="something_%d.html#row_%s">%s</a>' % (self.page_num-1,self.page_line,event) ) - else: - stime = time.strftime("%H:%M:%S", new_time) - - if not self.old_time or self.old_time != new_time: - self.page_fp.write("""<TR><th scope="row" class="%s">%s</th>""" % (row_class, stime)) - else: - self.page_fp.write("""<TR><th scope="row" class="%s" style="color: #cacaca">%s</th>""" % (row_class, stime)) - - self.page_line+=1 - - def new_tab(self,msg): - self.page_fp.write(" <TD>" + msg + "</TD>\n") - - def close_page(self): - self.page_fp.write("</table></html>\n") - self.page_fp.close() - - def finish(self): - self.close_page() - -class host_class: - - def __init__(self): - self.logs = [] - - self.log_idx = 0 # first log - self.log_ptr = 0 # first char - - self.cur_line = None - - def add_log(self, logfile): -# if not logfile == logfile_class: -# raise "InvalidLogfile" - - for inc in range(0,len(self.logs)): - if logfile.time_end() < self.logs[inc].time_begin(): - self.logs.insert(inc, logfile) - break - else: - self.logs.append(logfile) - - def hostname(self): - try: return self.logs[0].hostname() - except: return None - - def tell(self): - sumsize = 0 - if self.log_idx > 0: - for inc in range(0, self.log_idx): - sumsize += self.logs[inc].size() - try: - sumsize += self.fp().tell() - except TypeError: - pass - return sumsize - - def size(self): - sumsize = 0 - for inc in range(0, len(self.logs)): - sumsize += self.logs[inc].size() - return sumsize - - def eof(self): - if self.tell() >= self.size(): - return True - return False - - def seek(self, offset, whence = 0): - if whence == 1: offset = self.tell() + offset - elif whence == 2: offset = self.size() + offset - - sumsize = 0 - for inc in range(0, len(self.logs)): - if offset <= sumsize + self.logs[inc].size(): - offset -= sumsize - self.log_idx = inc - self.log_ptr = offset - self.logs[inc].seek(offset) - return True - sumsize += self.logs[inc].size() - raise "Off_Boundaries" - - def time(self): - return time.strptime(self.cur_line[0:15], "%b %d %H:%M:%S") - pos = self.tell() - try: - toret = time.strptime(self.readline()[0:15], "%b %d %H:%M:%S") - except ValueError: - toret = None - self.seek(pos) - return toret - - def fp(self): - return self.logs[self.log_idx] - - def backline(self): - self.seek(-len(self.cur_line), 1) - - def readline(self): - if self.eof(): - return "" - - while True: - toret = self.fp().readline() - if len(toret) == 0: - if self.log_idx < len(self.logs): - self.log_idx += 1 - self.fp().seek(0) - continue - else: - return "" - - if self.validate_line(toret) or toret == "": - self.cur_line = toret - return toret - else: - print "invalid line" - - def validate_line(self, line): - try: - time.strptime(line[0:15], "%b %d %H:%M:%S") - except: - return False - return True - - def cur_msg(self): - if not hasattr(self,"_regex_cur_msg"): - self._regex_cur_msg = re.compile(r"""^.* %s (\S+:.*)$""" % self.hostname()) - - try: return self._regex_cur_msg.findall(self.cur_line)[0] - except: return self.cur_line - -class logfile_class: - - def __init__(self,fname): - self.events = [] - self.fname = fname - self.fp = open(fname) - - def hostname(self): - pos = self.fp.tell() - toret = self.fp.readline()[16:].split(" ")[0] - self.fp.seek(pos) - return toret - - def time_begin(self): - pos = self.fp.tell() - self.fp.seek(0) - toret = time.strptime(self.fp.readline()[0:15], "%b %d %H:%M:%S") - self.fp.seek(pos) - return toret - - def time_end(self): - pos = self.fp.tell() - bs = 1024 - if self.size() < bs: bs = self.size() - self.fp.seek(-bs, 2) - line = self.fp.read(bs) - toret = time.strptime(line[line.rfind("\n", 0, bs - 1) + 1:][0:15], "%b %d %H:%M:%S") - self.fp.seek(pos) - return toret - - def size(self): - return os.path.getsize(self.fname) - - def eof(self): - return self.fp.tell() > self.size() - - def readline(self): - return self.fp.readline() - - def seek(self,pos): - self.fp.seek(pos) - - def tell(self): - return self.fp.tell() - - def validate_line(self): - return self.time_current(self.curmessage()) - - def time_current(self): - if len(self.curline) == 0: return None - try: - return time.strptime(self.curline[0:15], "%b %d %H:%M:%S") - except ValueError: - print "could not parse time", self.curline - return False - -def usage(): - print "ciao" - -try: - opts, args = getopt.getopt(sys.argv[1:], "hi:v", ["help", "input="]) -except getopt.GetoptError: - # print help information and exit: - usage() - sys.exit(2) - -cmdline = {} -cmdline["logfiles"] = [] - -for o, a in opts: - if o == "-v": - verbose = True - if o in ("-h", "--help"): - usage() - sys.exit() - if o in ("-i", "--input"): - print o,a - for fname in sys.argv[2:]: - cmdline["logfiles"].append(fname) - sys.stderr.write("adding log %s\n" % fname) - -hosts = {} - -for logname in cmdline["logfiles"]: - log = logfile_class(logname) - hostname = log.hostname() - sys.stderr.write("log %s for host %s\n" % (logname, hostname)) - if not hosts.has_key(hostname): - hosts[hostname] = host_class() - hosts[hostname].add_log(log) - -sys.stderr.write("finished adding logs\n") - -#print '<ul id="toc">' -#for log in logs: -# print logs[idx].fname, logs[idx].events -# for line, msglen, event in log.events: -# print ' <li><span>%s</span> <a href="#">Link</a><br /></li>' % event - -htmlgen = htmlgen_class() - -previous_date = None - -while True: - # who is next ? - lowest_date = None - for host in hosts: - if hosts[host].eof(): - continue - - hosts[host].readline() - - if lowest_date == None or hosts[host].time() < lowest_date: - lowest_date = hosts[host].time() - - if lowest_date == None: - # all logs are EOF - break - - events = [] - for host in hosts: - if hosts[host].time() == lowest_date: - - if re.match(r'^kernel: Linux version', hosts[host].cur_msg()): - events.append("%s rebooted" % host) - - elif re.match(r'^.*fencing node', hosts[host].cur_msg()): - events.append(host + " " + hosts[host].cur_msg()) - - elif re.match(r'.*fence ".*" success', hosts[host].cur_msg()): - events.append(host + " " + hosts[host].cur_msg()) - - elif re.match(r'.*fence ".*" failed', hosts[host].cur_msg()): - events.append(host + " " + hosts[host].cur_msg()) - - elif re.match(r'.*quorum lost, blocking activity', hosts[host].cur_msg()): - events.append(host + " " + hosts[host].cur_msg()) - - elif re.match(r'.*quorum regained, resuming activity', hosts[host].cur_msg()): - events.append(host + " " + hosts[host].cur_msg()) - - elif re.match(r'.*segfault at', hosts[host].cur_msg()): - events.append(host + " " + hosts[host].cur_msg()) - - elif not hosts[host].eof(): - hosts[host].backline() - - if len(events): print time.strftime("%A %B %d %H:%M:%S", lowest_date), events - - if htmlgen.page_line == 0 or htmlgen.page_line > 10000: - print "creating new page #%d" % htmlgen.page_num - htmlgen.new_page() - - htmlgen.new_line(lowest_date, events) - - for host in hosts: - if hosts[host].time() == lowest_date: - htmlgen.new_tab(hosts[host].cur_msg()) - else: - htmlgen.new_tab("") - -htmlgen.close_page() - - - - - - - - - - - - diff --git a/src/extras/sos-html-logs/lib/__init__.py b/src/extras/sos-html-logs/lib/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/src/extras/sos-html-logs/lib/__init__.py diff --git a/src/extras/sos-html-logs/lib/helpers.py b/src/extras/sos-html-logs/lib/helpers.py new file mode 100644 index 00000000..995cf16b --- /dev/null +++ b/src/extras/sos-html-logs/lib/helpers.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python + +def ksort(d, func = None): + keys = d.keys() + keys.sort(func) + return keys + +class Memoize: + """Memoize(fn) - an instance which acts like fn but memoizes its arguments + Will only work on functions with non-mutable arguments + """ + def __init__(self, fn): + self.fn = fn + self.memo = {} + def __call__(self, *args): + if not self.memo.has_key(args): + self.memo[args] = self.fn(*args) + return self.memo[args] + +class SQL: + def __init__(self): + self.dbcon = sqlite.connect(":memory:", check_same_thread=False) + self.dbcur = self.dbcon.cursor() + + self.dbcon.execute("create table events(date, host, position, message, css_style)") + + def execute(self, query): + return self.dbcon.execute(query) + +def color_gradient(src, dst, percent): + csrc = [ col for col in src ] + cdst = [ col for col in dst ] + toret = [] + + for inc in range(0,3): + toret.append(csrc[inc] + ((cdst[inc] - csrc[inc]) * percent / 100)) + + return toret + +def rgb_to_hex(rgb): + return "%X%X%X" % (rgb[0], rgb[1], rgb[2]) diff --git a/src/extras/sos-html-logs/lib/logs_abstraction.py b/src/extras/sos-html-logs/lib/logs_abstraction.py new file mode 100644 index 00000000..5708c960 --- /dev/null +++ b/src/extras/sos-html-logs/lib/logs_abstraction.py @@ -0,0 +1,415 @@ +#!/usr/bin/env python + +import os, sys, time, re, pdb +from threading import Thread, Lock +from helpers import * +from operator import itemgetter +import traceback + +class cluster_class: + + def __init__(self): + self.hosts = {} + self.index = {} + self.daemon_log_counter = [] + self.parsers = [] + + def host_names(self): + return ksort(self.hosts) + + def register_parser(self, parser_class): + self.parsers.append(parser_class) + + def get_parser(self, parser_name): + for parser in self.parsers: + if parser.__class__.__name__ == parser_name: + return parser + + def get_host(self, host): + return self.hosts[host] + + def tell(self): + toret = {} + for host in self.hosts: + toret[host] = self.hosts[host].tell() + return toret + + def tell_sum(self): + toret = 0 + for host in self.hosts: + toret += self.hosts[host].tell() + return toret + + def size(self): + toret = 0 + for host in self.hosts: + toret += self.hosts[host].size() + return toret + + def seek(self, positions): + # make sure positions in argument are valid + for host in self.hosts: + if host not in positions.keys(): + print "cannot find", positions + raise "Invalid_Positions" + + # seek each host to saved position + for host in positions: + self.hosts[host].seek(positions[host]) + + return True + + def seek_beginning(self): + for host in self.hosts: + self.hosts[host].seek(0) + + return True + + def add_log(self, logname): + log = logfile_class(logname) + hostname = log.hostname() + sys.stderr.write("""adding log "%s" for host %s\n""" % (logname, hostname)) + if not self.hosts.has_key(hostname): + self.hosts[hostname] = host_class() + self.hosts[hostname].add_log(log) + + def get_position_by_date(self, goto_date): + try: + return self.index[goto_date]["position"] + except KeyError: + # can't find position in cache, calculate on the fly + # + for cmp_date in ksort(self.index): + if goto_date <= cmp_date: + return self.index[cmp_date]["position"] + return None + + def parse(self, threaded = False): + + if threaded and (not hasattr(self,"parse_t") or self.parse_t == None): + self.parse_t = Thread(target=self.parse, name='parse-thread', args = [True] ) + self.parse_t.start() + return self.parse_t + + print "parsing begins" + + daemon_log_counter = {} + + self.seek_beginning() + + for date in self: + + self.index[date.date] = { "position":date.position, "log_counter":{} } + + for host in self.hosts: + self.index[date.date]["log_counter"][host]=0 + + try: + for log in date[host]: + self.index[date.date]["log_counter"][host]+=1 + + for parser_class in self.parsers: + parser_class.parse_line(date, log) + + # count how many logs per daemon + try: + daemon_log_counter[log.daemon()]+=1 + except KeyError: + daemon_log_counter[log.daemon()]=1 + + except "Eof": + # no more logs for this host + pass + + self.daemon_log_counter = sorted(daemon_log_counter.items(), key=itemgetter(1), reverse=True) + + print "parsing ends." + + def eof(self): + for host in self.hosts: + if not self.hosts[host].eof(): +# print "All logs are not EOF yet", host + return False + print "All logs are EOF!" + return True + + def __iter__(self): + return self + + def next(self): + if self.eof(): + raise StopIteration + + return log_date_class(cluster = self) + + def instance(self): + toret = cluster_class() + + for host in self.hosts: + toret.hosts[host] = host_class() + + for log in self.hosts[host].logs: + toret.hosts[host].logs.append(logfile_class(log.fname)) + + toret.index = self.index + toret.daemon_log_counter = self.daemon_log_counter + toret.parsers = self.parsers + + return toret + +class log_date_class: + def __init__(self, cluster): + self.cluster = cluster + self.date = None + self.hosts = cluster.hosts.keys() + + self.position = cluster.tell() + + newtime = None + + # 1st run, must find out what is the oldest date for each host + for host in self.hosts: + while True: + try: + newtime = time.strptime("2007 " + cluster.hosts[host].readline()[0:15], "%Y %b %d %H:%M:%S") + except "Eof": + break + except ValueError: + print "parsing error in line", cluster.hosts[host].tell() + else: + break + + if newtime: + if not self.date or newtime < self.date: + self.date = newtime + + if not cluster.hosts[host].eof(): + cluster.hosts[host].backline() + + # this should almost never happen, but just in case. + if not self.date: + raise "Strange_Eof" + + def __str__(self): + return time.strftime("%b %d %H:%M:%S", self.date) + + def __getitem__(self, host): + return log_date_host(self.cluster, self.cluster.hosts[host], self.date) + + def __iter__(self): + return self + +class log_date_host: + def __init__(self, cluster, host, date): + self.cluster = cluster + self.host = host + self.date = date + + self.parent_date = date + + def __iter__(self): + return self + + def next(self): + position = self.host.tell() + + self.host.readline() + + try: + if time.strptime("2007 " + self.host.cur_line[0:15], "%Y %b %d %H:%M:%S") <= self.date: + return log_line_class(self.parent_date, self.host, position, self.host.cur_line) + except: + return log_line_class(self.parent_date, self.host, position, self.host.cur_line) + + self.host.backline() + + raise StopIteration + +class log_line_class: + def __init__(self, date, host, position, line): + self.host = host + self.position = position + self.line = line + self.parse = Memoize(self.parse_uncached) + + self.parent_date = date + self.parent_host = host + + def parse_uncached(self): + try: + return re.findall(r"""^(... .. ..:..:..) %s ([-_0-9a-zA-Z \.\/\(\)]+)(\[[0-9]+\])?(:)? (.*)$""" % self.hostname(), self.line)[0] + except: + return [ None, None, None, None, None ] + + def __str__(self): + return self.line + + def date(self): + try: + return time.strptime("2007 " + self.line[0:15], "%Y %b %d %H:%M:%S") + except: + return False + + def hostname(self): + return self.line[16:].split(" ", 1)[0] + + def daemon(self): + return self.parse()[1] + + def message(self): + return self.parse()[4] + +class host_class: + + def __init__(self): + self.logs = [] + + self.log_idx = 0 # first log + self.log_ptr = 0 # first char + + self.cur_line = None + + def __str__(self): + return self.hostname() + + def add_log(self, logfile): + + for inc in range(0,len(self.logs)): + if logfile.time_end() < self.logs[inc].time_begin(): + self.logs.insert(inc, logfile) + break + else: + self.logs.append(logfile) + + def hostname(self): + return self.logs[0].hostname() +# try: return self.logs[0].hostname() +# except: return None + + def tell(self): + sumsize = 0 + if self.log_idx > 0: + for inc in range(0, self.log_idx): + sumsize += self.logs[inc].size() + try: + sumsize += self.fp().tell() + except TypeError: + pass + return sumsize + + def size(self): + sumsize = 0 + for inc in range(0, len(self.logs)): + sumsize += self.logs[inc].size() + return sumsize + + def eof(self): + if self.tell() >= self.size(): + return True + return False + + def seek(self, offset, whence = 0): + if whence == 1: offset = self.tell() + offset + elif whence == 2: offset = self.size() + offset + + sumsize = 0 + for inc in range(0, len(self.logs)): + if offset <= sumsize + self.logs[inc].size(): + offset -= sumsize + self.log_idx = inc + self.log_ptr = offset + self.logs[inc].seek(offset) + return True + sumsize += self.logs[inc].size() + raise "Off_Boundaries" + + def seek_and_read(self, offset, whence = 0): + self.seek(offset, whence) + return self.readline() + + def time(self): + return time.strptime("2007 " + self.cur_line[0:15], "%Y %b %d %H:%M:%S") + + def fp(self): + return self.logs[self.log_idx] + + def backline(self): + self.seek(-len(self.cur_line), 1) + + def readline(self): + if self.eof(): + raise "Eof" + + while True: + position = self.fp().tell() + fromfile = self.fp().fname + toret = self.fp().readline() + if len(toret) == 0: + if self.log_idx < len(self.logs): + self.log_idx += 1 + self.fp().seek(0) + continue + else: + return "" + + if len(toret) > 0 or toret == "": + self.cur_line = toret + self.cur_file = fromfile + self.cur_pos = position + return toret + else: + print "invalid line", toret + +class logfile_class: + + def __init__(self,fname): + self.fname = fname + self.fp = open(fname) + + def hostname(self): + pos = self.fp.tell() + self.seek(0) + toret = self.fp.readline()[16:].split(" ")[0] + self.fp.seek(pos) + return toret + + def time_begin(self): + pos = self.fp.tell() + self.fp.seek(0) + toret = time.strptime(self.fp.readline()[0:15], "%b %d %H:%M:%S") + self.fp.seek(pos) + return toret + + def time_end(self): + pos = self.fp.tell() + bs = 1024 + if self.size() < bs: bs = self.size() + self.fp.seek(-bs, 2) + buf = self.fp.read(bs) + bufsplit = buf.split("\n") + bufsplit.reverse() + for line in bufsplit: + if len(line) == 0: continue + try: toret = time.strptime(line[0:15], "%b %d %H:%M:%S") + except ValueError: print "Error in conversion"; continue + else: break + self.fp.seek(pos) + return toret + + def size(self): + return os.path.getsize(self.fname) + + def eof(self): + return self.fp.tell() > self.size() + + def readline(self): + return self.fp.readline() + + def seek(self,pos): +# if cmdline["verbose"]: +# print "seeking to position %d for file %s" % (pos, self.fname) +# traceback.print_stack() + self.fp.seek(pos) + + def tell(self): + return self.fp.tell() diff --git a/src/extras/sos-html-logs/lib/parsers/__init__.py b/src/extras/sos-html-logs/lib/parsers/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/src/extras/sos-html-logs/lib/parsers/__init__.py diff --git a/src/extras/sos-html-logs/lib/parsers/crazyclock_parser.py b/src/extras/sos-html-logs/lib/parsers/crazyclock_parser.py new file mode 100644 index 00000000..3e794a6f --- /dev/null +++ b/src/extras/sos-html-logs/lib/parsers/crazyclock_parser.py @@ -0,0 +1,24 @@ +import time +import soshtmllogs.parsers_base as parsers_base + +class crazyclock_Parser(parsers_base.base_Parser_class): + + def initialize(self): + # in this dict, we store the last date for each host + self.last_date = {} + + def parse_line(self, date, log): + + if date.date != log.date(): + self.add_event(log, "Time skew (%d seconds in the past)" % int(time.mktime(date.date) - time.mktime(log.date())), "color:purple; background-color:yellow") + + self.last_date[log.parent_host] = log.date() + + return + + def analyse_line(self, log): + + yield """The following line matched the rule:<BR>""" + yield """<DIV STYLE="margin-top: 10px; padding: 10px 10px 10px 10px; margin-bottom: 10px; background-color: white; border: 1px dotted black;">%s</B></DIV>""" % log.line + + yield "The logged time for this message is before the one for the previous message appearing in the log." diff --git a/src/extras/sos-html-logs/lib/parsers/dmapper_parser.py b/src/extras/sos-html-logs/lib/parsers/dmapper_parser.py new file mode 100644 index 00000000..279df50e --- /dev/null +++ b/src/extras/sos-html-logs/lib/parsers/dmapper_parser.py @@ -0,0 +1,106 @@ +import re +import soshtmllogs.parsers_base as parsers_base + +class dmapper_Parser(parsers_base.base_Parser_class): + default_css = "color:black; background-color:orange; font-size:larger" + + def initialize(self): + self.db.execute("create table dmapper(disk PRIMARY KEY, host INTEGER, channel INTEGER, id INTEGER, lun INTEGER)") + + def parse_line(self, date, logline): + + # kernel: sd 1:0:0:49152: Attached scsi disk sdt + found = re.findall(r"""^sd (.+):(.+):(.+):(.+): Attached scsi disk (.+)$""", logline.message()) + if found: + # we can learn a little about the layout + found = found[0] + self.db.execute("""replace into dmapper(disk,host,channel,id,lun) values ("%s",%d,%d,%d,%d)""" + % (found[4], int(found[0]), int(found[1]), int(found[2]), int(found[3])) + ) + + found = re.findall(r"""^Attached scsi disk (.+) at scsi(.+), channel (.+), id (.+), lun (.+)$""", logline.message()) + if found: + # we can learn a little about the layout + found = found[0] + self.db.execute("""replace into dmapper(disk,host,channel,id,lun) values ("%s",%d,%d,%d,%d)""" + % (found[0], int(found[1]), int(found[2]), int(found[3]), int(found[4])) + ) + + #Nov 7 12:55:38 itrac415 kernel: SCSI error : <2 0 3 0> return code = 0x20000 + found = re.findall(r"""^SCSI error : <(.+)> return code = (.+)$""", logline.message()) + if found: + found = found[0] + scsi_address_split = [ int(sid) for sid in found[0].split(" ") ] + results = self.db.execute_and_fetch("select disk from dmapper where host = %d AND channel = %d AND id = %d AND lun = %d" % + (scsi_address_split[0], scsi_address_split[1], scsi_address_split[2], scsi_address_split[3]) + ) + for row in results: found[0] = row["disk"] + self.add_event(logline, "SCSI error on %s - %s" % (found[0], self._get_did_error(found[1])), self.default_css) + return + + found = re.findall(r"""^end_request: I/O error, dev (.*), sector .*$""", logline.message()) + if found: + self.add_event(logline, "I/O error on %s" % (found[0]), self.default_css) + return + + if logline.daemon() != "multipathd": + return + + found = re.findall(r"""(.*): mark as failed$""", logline.message()) + if found: + disk = self._get_disk_from_majmin(found[0]) + self.add_event(logline, "Multipath path %s (%s) failed" % (found[0], disk), self.default_css) + return + + found = re.findall(r"""(.*): reinstated$""", logline.message()) + if found: + disk = self._get_disk_from_majmin(found[0]) + self.add_event(logline, "Multipath path %s (%s) reinstated" % (found[0], disk), self.default_css) + return + + return + + def _get_disk_from_majmin(self, majmin): + major, minor = majmin.split(":") + major, minor = int(major), int(minor) + + block_majors = [8, 65, 66, 67, 68, 69, 70, 71, 128, 129, 130, 131, 132, 133, 134, 135] + + disk = (block_majors.index(major) * 16) + int(minor / 16) + partition = minor % 16 + + # 97 = ord('a') + # 25 = ord('z') - ord('a') + + rchar = chr(97 + (disk % 25)) + + if disk > 25: + lchar = chr(97 - 1 + int(disk / 25)) + rchar = chr(ord(rchar)-1) + else: + lchar = "" + + return "sd" + lchar + rchar + + def _get_did_error(self, hexerr): + # hexherr = 0x20000 + + if not hexerr.startswith("0x"): + return "Unknown error code (%s)" % hexerr + + err = hexerr[2] + + if err == "0": return "DID_OK (NO error)" + if err == "1": return "DID_NO_CONNECT (Couldn\\'t connect before timeout period)" + if err == "2": return "DID_BUS_BUSY (BUS stayed busy through time out period)" + if err == "3": return "DID_TIME_OUT (TIMED OUT for other reason)" + if err == "4": return "DID_BAD_TARGET (BAD target)" + if err == "5": return "DID_ABORT (Told to abort for some other reason)" + if err == "6": return "DID_PARITY (Parity error)" + if err == "7": return "DID_ERROR (Internal error)" + if err == "8": return "DID_RESET (Reset by somebody)" + if err == "9": return "DID_BAD_INTR (Got an interrupt we weren't expecting)" + if err == "a": return "DID_PASSTHROUGH (Force command past mid-layer)" + if err == "b": return "DID_SOFT_ERROR (The low level driver just wish a retry)" + if err == "c": return "DID_IMM_RETRY (Retry without decrementing retry count)" + if err == "d": return "DID_REQUEUE (Requeue command (no immediate retry) also without decrementing the retry count)" diff --git a/src/extras/sos-html-logs/lib/parsers/simple_parser.py b/src/extras/sos-html-logs/lib/parsers/simple_parser.py new file mode 100644 index 00000000..9beb10f8 --- /dev/null +++ b/src/extras/sos-html-logs/lib/parsers/simple_parser.py @@ -0,0 +1,29 @@ +import ConfigParser, re +import soshtmllogs.parsers_base as parsers_base + +class simple_Parser(parsers_base.base_Parser_class): + + def initialize(self): + self.config = ConfigParser.ConfigParser() + self.config.readfp(open('/usr/lib/python2.4/site-packages/soshtmllogs/parsers/simple_parser.rules')) + + def parse_line(self, date, log): + + for section in self.config.sections(): + match = False + + if self.config.has_option(section, "find"): + if log.line.find(self.config.get(section, "find")) >= 0: + match = True + elif self.config.has_option(section, "regex"): + if re.match(self.config.get(section, "regex"), log.line): + match = True + + if not match: + continue + + self.add_event(log, section, "color:green; background-color:yellow; font-size:larger") + + return + + return None diff --git a/src/extras/sos-html-logs/lib/parsers/simple_parser.rules b/src/extras/sos-html-logs/lib/parsers/simple_parser.rules new file mode 100644 index 00000000..724fbfa8 --- /dev/null +++ b/src/extras/sos-html-logs/lib/parsers/simple_parser.rules @@ -0,0 +1,38 @@ +[Syslog restart (possible system restart)] +regex = .*syslogd .*: restart.$ + +[System reboot] +regex = ^kernel: Linux version + +[Fencing node] +regex = ^.*fencing node + +[Fencing node succeeded] +regex = .*fence ".*" success + +[Fencing node failed] +regex = .*fence ".* + +[Quorum lost] +find = quorum lost, blocking activity + +[Quorum regained] +find = quorum regained, resuming activity + +[Segmentation fault] +find = segfault at + +[Inittab reloaded] +find = Re-reading inittab + +[Init line respawning too fast] +find = respawning too fast: disabled for + +[Ext3 file-system error] +find = EXT3-fs error + +[File-system remounted read-only] +find = Remounting filesystem read-only + +[Shutting down] +find = shutdown: shutting down diff --git a/src/extras/sos-html-logs/share/html/overlib/BabelFish.js b/src/extras/sos-html-logs/share/html/overlib/BabelFish.js new file mode 100644 index 00000000..ed45ecfc --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/BabelFish.js @@ -0,0 +1,58 @@ +/*
+ BabelFish.js - Script for using the AltaVista BabelFish translation service.
+ Adapted by Foteos Macrides for use with the overlibmws code set.
+ See http://www.macridesweb.com/oltest/BabelFish.html for a demonstration.
+ Initial: October 26, 2003 - Last Revised: April 17, 2004
+*/
+OLtrans_en = new Image();
+OLtrans_en.src = "http://babelfish.altavista.com/static/i/af/trans_en.gif"
+OLtrans_en_off = new Image();
+OLtrans_en_off.src = "http://babelfish.altavista.com/static/i/af/trans_en_off.gif"
+
+var OLbfURL = location.href;
+
+if (location.href.indexOf("babelfish.altavista.com") == -1) {
+var BabelFish =
+'<div class="babelfish">'
++'<p align="center"><strong>Note:</strong> This page can be viewed in a different language by '
++'selecting the corresponding flag below.</p>'
++'<p align="center">'
++'<!--script type="text/javascript" src="http://www.altavista.com/r?entr"></script-->'
++'<Map name="translate_eng">'
++'<AREA COORDS="0,1,129,38" SHAPE="rect" target="translate" '
++'title="Go to Babel Fish home page/" '
++'href="http://babelfish.altavista.com">'
++'<AREA COORDS="5,110,32,126" SHAPE="rect" target="translate" '
++'title="Translate English to Chinese." '
++'href="http://babelfish.altavista.com/babelfish/tr?doit=done&url='+OLbfURL+'&lp=en_zh">'
++'<AREA COORDS="38,110,65,126" SHAPE="rect" target="translate" '
++'title="Translate English to German." '
++'href="http://babelfish.altavista.com/babelfish/tr?doit=done&url='+OLbfURL+'&lp=en_de">'
++'<AREA COORDS="70,110,95,126" SHAPE="rect" target="translate" '
++'title="Translate English to Japanese." '
++'href="http://babelfish.altavista.com/babelfish/tr?doit=done&url='+OLbfURL+'&lp=en_ja">'
++'<AREA COORDS="99,110,123,126" SHAPE="rect" target="translate" '
++'title="Translate English to Korean." '
++'href="http://babelfish.altavista.com/babelfish/tr?doit=done&url='+OLbfURL+'&lp=en_ko">'
++'<AREA COORDS="8,130,31,146" SHAPE="rect" target="translate" '
++'title="Translate English to French." '
++'href="http://babelfish.altavista.com/babelfish/tr?doit=done&url='+OLbfURL+'&lp=en_fr">'
++'<AREA COORDS="39,130,65,146" SHAPE="rect" target="translate" '
++'title="Translate English to Italian." '
++'href="http://babelfish.altavista.com/babelfish/tr?doit=done&url='+OLbfURL+'&lp=en_it">'
++'<AREA COORDS="70,130,93,146" SHAPE="rect" target="translate" '
++'title="Translate English to Portuguese." '
++'href="http://babelfish.altavista.com/babelfish/tr?doit=done&url='+OLbfURL+'&lp=en_pt">'
++'<AREA COORDS="100,130,125,146" SHAPE="rect" target="translate" '
++'title="Translate English to Spanish." '
++'href="http://babelfish.altavista.com/babelfish/tr?doit=done&url='+OLbfURL+'&lp=en_es">'
++'</Map>'
++'<img src="http://babelfish.altavista.com/static/i/af/trans_en.gif" '
++'width="131" height="156" usemap="#translate_eng" border="0"><br></p>'
++'<p align="center">The translations are done via the AltaVista Babel Fish service.</p></div>';
+}else{
+var BabelFish =
+'<div class="babelfish"><p align="center">'
++'<img src="http://babelfish.altavista.com/static/i/af/trans_en_off.gif" '
++'width="131" height="156" border="0"></p></div>';
+}
diff --git a/src/extras/sos-html-logs/share/html/overlib/ajaxcontentmws.js b/src/extras/sos-html-logs/share/html/overlib/ajaxcontentmws.js new file mode 100644 index 00000000..e041ae71 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/ajaxcontentmws.js @@ -0,0 +1,181 @@ +/*
+ ajaxcontentmws.js - Foteos Macrides (author and Copyright holder)
+ Initial: June 22, 2006 - Last Revised: March 2, 2007
+ Wrapper function set for getting and using the responseText and / or
+ responseXML from a GET or POST XMLHttpRequest, which can be used to
+ generate dynamic content for overlib or overlib2 calls, or to modify
+ the content of a displayed STICKY popup dynamically.
+
+ For GET Use:
+ onmouseover="return OLgetAJAX(url, command, delay, css);"
+ onmouseout="OLclearAJAX();" (if delay > 0)
+ or:
+ onclick="OLgetAJAX(url, command, 0, css); return false;"
+ or:
+ onload="OLgetAJAX(url, command, 0, css);
+
+ Where:
+ url (required)
+ is a quoted string, or unquoted string variable name or array entry, with
+ the full, relative, or partial URL for a file or a server-side script (php,
+ asp, or cgi, e.g. perl), and may have a query string appended (e.g.,
+ 'http://my.domain.com/scripts/myScript.php?foo=bar&life=grand').
+ And:
+ command (required)
+ is the function reference (unquoted name without parens) of a function to
+ be called when the server's response has been received (it could instead be
+ an inline function, i.e., defined within the 2nd argument, or a quoted string
+ for a function with parens and any args)
+ And:
+ delay (may be omitted unless css is included)
+ is an unquoted number indicating the number of millisecs to wait before
+ initiating an XMLHttpRequest GET request. It should be 0 when using onclick
+ or onload, but may be a modest value such as 300 for onmouseover to avoid
+ any chatter of requests. When used with onmouseover, include:
+ onmouseout="OLclearAJAX();"
+ to clear the request if the user does not hover for at least that long. If
+ the popup is not STICKY, include an nd or nd2 call, e.g.,
+ onmouseout="OLclearAJAX(); nd();"
+ And:
+ css (may be omitted)
+ is a quoted string with the CSS class (e.g. 'ovfl510' for
+ .ovfl510 {width:510px; height:145px; overflow:auto; ...} ) for a div to
+ encase the responseText and set the width, height and scrollbars in the
+ main text area of the popup, or the unquoted number 0 if no encasing div
+ is to be used.
+
+ For POST substitute OLpostAJAX(url, qry, command, delay, css);
+ Where
+ qry (required)
+ is the string to be posted, typically a query string (without a lead ?)
+ and the other arguments are as above.
+
+ See http://www.macridesweb.com/oltest/AJAX.html for more information.
+*/
+
+// Initialize our global variables for this function set.
+var OLhttp=false,OLcommandAJAX=null,OLdelayidAJAX=0,OLclassAJAX='',
+OLresponseAJAX='',OLdebugAJAX=false;
+
+// Create a series of wrapper functions (e.g. OLcmdT#() for ones which
+// use OLhttp.responseText via the OLresponseAJAX global, and OLcmdX#()
+// for ones which use OLhttp.responseXML) whose reference (unquoted name
+// without parens) is the 2nd argument in OLgetAJAX(url,command,delay,css)
+// calls. This one is for the first example in the AJAX.html support
+// document, to use the OLresponseAJAX global as the lead argument for an
+// overlib popup. Put your functions in the head, or in another imported
+// .js file, so that they will not be affected by updates of this .js file.
+//
+function OLcmdExT1() {
+ return overlib(OLresponseAJAX, TEXTPADDING,0, CAPTIONPADDING,4,
+ CAPTION,'Example with AJAX content via <span '
+ +'class="yellow">responseText</span>. Popup scrolls with the window.',
+ WRAP, BORDER,2, STICKY, CLOSECLICK, SCROLL,
+ MIDX,0, RELY,100,
+ STATUS,'Example with AJAX content via responseText of XMLHttpResponse');
+}
+
+// Alert for old browsers which lack XMLHttpRequest support.
+function OLsorryAJAX() {
+ alert('Sorry, AJAX is not supported by your browser.');
+ return false;
+}
+
+// Check 2nd arg for function
+function OLchkFuncAJAX(ar){
+ var t=typeof ar;return (((t=='function'))||((t=='string')&&(/.+\(.*\)/.test(ar))));
+}
+
+// Alert for bad 2nd argument
+function OLnotFuncAJAX(m) {
+ if(over)cClick();
+ alert('The 2nd arg of OL'+m+'AJAX is not a function reference, nor an inline function, '
+ +'nor a quoted string with a function indicated.');
+ return OLclearAJAX();
+}
+
+// Alert for indicating an XMLHttpRequest network error.
+function OLerrorAJAX() {
+ alert('Network error '+OLhttp.status+'. Try again later.');
+ return false;
+}
+
+// Returns a new XMLHttpRequest object, or false for older browsers
+// which did not yet support it. Called as OLhttp=OLnewXMLHttp() via
+// the OLgetAJAX(url,command,delay,css) wrapper function.
+//
+function OLnewXMLHttp() {
+ var f=false,req=f;
+ if(window.XMLHttpRequest)eval(new Array('try{',
+ 'req=new XMLHttpRequest();','}catch(e){','req=f;','}').join('\n'));
+ /*@cc_on @if(@_jscript_version>=5)if(!req)
+ eval(new Array('try{','req=new ActiveXObject("Msxml2.XMLHTTP");',
+ '}catch(e){','try{','req=new ActiveXObject("Microsoft.XMLHTTP");',
+ '}catch(e){','req=f;','}}').join('\n')); @end @*/
+ return req;
+}
+
+// Handle the OLhttp.responseText string from the XMLHttpRequest object.
+function OLdoAJAX() {
+ if(OLhttp.readyState==4){
+ if(OLdebugAJAX)alert(
+ 'OLhttp.status = '+OLhttp.status+'\n'
+ +'OLhttp.statusText = '+OLhttp.statusText+'\n'
+ +'OLhttp.getAllResponseHeaders() = \n'
+ +OLhttp.getAllResponseHeaders()+'\n'
+ +'OLhttp.getResponseHeader("Content-Type") = '
+ +OLhttp.getResponseHeader("Content-Type")+'\n');
+ if(!OLhttp.status||OLhttp.status==200){
+ OLresponseAJAX=OLclassAJAX?'<div class="'+OLclassAJAX+'">':'';
+ OLresponseAJAX += OLhttp.responseText;
+ OLresponseAJAX += OLclassAJAX?'</div>':'';
+ if(OLdebugAJAX)alert('OLresponseAJAX = \n'+OLresponseAJAX);
+ OLclassAJAX=0;
+ return (typeof OLcommandAJAX=='string')?eval(OLcommandAJAX):OLcommandAJAX();
+ }else{
+ OLclassAJAX=0;
+ return OLerrorAJAX();
+ }
+ }
+}
+
+// Actually make the request initiated via OLgetAJAX or OLpostAJAX, or
+// invoke a "permission denied" alert if a cross-domain URL was used.
+function OLsetAJAX(url,qry) {
+ qry=(qry||null);var s='',m=(qry)?'POST':'GET';
+ OLdelayidAJAX=0;eval(new Array('try{','OLhttp.open(m,url,true);',
+ '}catch(e){','s=e','OLhttp=false;','}').join('\n'));if(!OLhttp){
+ alert(s+'\n(Cross-domain access not permitted)');return false;}if(qry)
+ OLhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');
+ OLhttp.onreadystatechange=OLdoAJAX;
+ OLhttp.send(qry);
+}
+
+// Clear or abort any delayed OLsetAJAX call or pending request.
+function OLclearAJAX() {
+ if(OLdelayidAJAX){clearTimeout(OLdelayidAJAX);OLdelayidAJAX=0;}
+ if(OLhttp&&!OLdebugAJAX){OLhttp.abort();OLhttp=false;}
+ return false;
+}
+
+// Load a new XMLHttpRequest object into the OLhttp global, load the
+// OLcommandAJAX and OLclassAJAX globals, and initiate a GET request
+// via OLsetAJAX(url) to populate OLhttp.
+function OLgetAJAX(url,command,delay,css) {
+ if(!OLchkFuncAJAX(command))return OLnotFuncAJAX('get');
+ OLclearAJAX();OLhttp=OLnewXMLHttp();if(!OLhttp)return OLsorryAJAX();
+ OLcommandAJAX=command;delay=(delay||0);css=(css||0);OLclassAJAX=css;
+ if(delay)OLdelayidAJAX=setTimeout("OLsetAJAX('"+url+"')",delay);
+ else OLsetAJAX(url);
+}
+
+// Load a new XMLHttpRequest object into the OLhttp global, load the
+// OLcommandAJAX and OLclassAJAX globals, and initiate a POST request
+// via OLsetAJAX(url,qry) to populate OLhttp.
+function OLpostAJAX(url,qry,command,delay,css) {
+ if(!OLchkFuncAJAX(command))return OLnotFuncAJAX('post');
+ OLclearAJAX();OLhttp=OLnewXMLHttp();if(!OLhttp)return OLsorryAJAX();
+ qry=(qry||0);OLcommandAJAX=command;delay=(delay||0);css=(css||0);OLclassAJAX=css;
+ if(delay)OLdelayidAJAX=setTimeout("OLsetAJAX('"+url+"','"+qry+"')",delay);
+ else OLsetAJAX(url,qry);
+}
diff --git a/src/extras/sos-html-logs/share/html/overlib/arrow.gif b/src/extras/sos-html-logs/share/html/overlib/arrow.gif Binary files differnew file mode 100644 index 00000000..71b08c1b --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/arrow.gif diff --git a/src/extras/sos-html-logs/share/html/overlib/calendarmws.js b/src/extras/sos-html-logs/share/html/overlib/calendarmws.js new file mode 100644 index 00000000..3e5aabac --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/calendarmws.js @@ -0,0 +1,621 @@ +/*
+ calendermws.js - Script for generating calender popups and selecting dates for form
+ submissions. See http://www.macridesweb.com/oltest/calendarmws.html for a demonstration.
+ Initial: November 9, 2003 - Last Revised: November 23, 2006
+
+****
+ Original: Kedar R. Bhave (softricks@hotmail.com)
+ Web Site: http://www.softricks.com
+ (uses window popups)
+
+ Modifications and customizations to work with the overLIB v3.50
+ Author: James B. O'Connor (joconnor@nordenterprises.com)
+ Web Site: http://www.nordenterprises.com
+ Developed for use with http://home-owners-assoc.com
+ Note: while overlib works fine with Netscape 4, this function does not work very
+ well, since portions of the "over" div end up under other fields on the form and
+ cannot be seen. If you want to use this with NS4, you'll need to change the
+ positioning in the overlib() call to make sure the "over" div gets positioned
+ away from all other form fields
+ The O'Connor script and many more are available free online at:
+ The JavaScript Source!! http://javascript.internet.com
+
+ Further modifications made by Foteos Macrides (http://www.macridesweb.com/oltest/)
+ and Bill McCormick (wpmccormick@freeshell.org) for overlibmws
+*/
+
+var ggPosX = -1;
+var ggPosY = -1;
+var ggInactive = 0;
+var ggOnChange = null;
+
+var ggWinContent = "";
+
+var weekend = [0,6];
+var weekendColor = "#e0e0e0";
+var fontface = "Verdana";
+var fontsize = 8; // in "pt" units; used with "font-size" style element
+
+var gNow = new Date();
+
+Calendar.Months = ["January", "February", "March", "April", "May", "June",
+"July", "August", "September", "October", "November", "December"];
+
+// Non-Leap year Month days..
+Calendar.DOMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
+// Leap year Month days..
+Calendar.lDOMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
+
+function Calendar(p_item, p_month, p_year, p_format) {
+ if ((p_month == null) && (p_year == null)) return;
+
+ if (p_month == null) {
+ this.gMonthName = null;
+ this.gMonth = null;
+ this.gYearly = true;
+ } else {
+ this.gMonthName = Calendar.get_month(p_month);
+ this.gMonth = new Number(p_month);
+ this.gYearly = false;
+ }
+
+ this.gYear = p_year;
+ this.gFormat = p_format;
+ this.gBGColor = "white";
+ this.gFGColor = "black";
+ this.gTextColor = "black";
+ this.gHeaderColor = "black";
+ this.gReturnItem = p_item;
+}
+
+Calendar.get_month = Calendar_get_month;
+Calendar.get_daysofmonth = Calendar_get_daysofmonth;
+Calendar.calc_month_year = Calendar_calc_month_year;
+
+function Calendar_get_month(monthNo) {
+ return Calendar.Months[monthNo];
+}
+
+function Calendar_get_daysofmonth(monthNo, p_year) {
+ /*
+ Check for leap year ..
+ 1.Years evenly divisible by four are normally leap years, except for...
+ 2.Years also evenly divisible by 100 are not leap years, except for...
+ 3.Years also evenly divisible by 400 are leap years.
+ */
+ if ((p_year % 4) == 0) {
+ if ((p_year % 100) == 0 && (p_year % 400) != 0)
+ return Calendar.DOMonth[monthNo];
+
+ return Calendar.lDOMonth[monthNo];
+ } else
+ return Calendar.DOMonth[monthNo];
+}
+
+function Calendar_calc_month_year(p_Month, p_Year, incr) {
+ /*
+ Will return an 1-D array with 1st element being the calculated month
+ and second being the calculated year
+ after applying the month increment/decrement as specified by 'incr' parameter.
+ 'incr' will normally have 1/-1 to navigate thru the months.
+ */
+ var ret_arr = new Array();
+
+ if (incr == -1) {
+ // B A C K W A R D
+ if (p_Month == 0) {
+ ret_arr[0] = 11;
+ ret_arr[1] = parseInt(p_Year) - 1;
+ } else {
+ ret_arr[0] = parseInt(p_Month) - 1;
+ ret_arr[1] = parseInt(p_Year);
+ }
+ } else if (incr == 1) {
+ // F O R W A R D
+ if (p_Month == 11) {
+ ret_arr[0] = 0;
+ ret_arr[1] = parseInt(p_Year) + 1;
+ } else {
+ ret_arr[0] = parseInt(p_Month) + 1;
+ ret_arr[1] = parseInt(p_Year);
+ }
+ }
+ return ret_arr;
+}
+
+function Calendar_calc_month_year(p_Month, p_Year, incr) {
+ /*
+ Will return an 1-D array with 1st element being the calculated month
+ and second being the calculated year
+ after applying the month increment/decrement as specified by 'incr' parameter.
+ 'incr' will normally have 1/-1 to navigate thru the months.
+ */
+ var ret_arr = new Array();
+
+ if (incr == -1) {
+ // B A C K W A R D
+ if (p_Month == 0) {
+ ret_arr[0] = 11;
+ ret_arr[1] = parseInt(p_Year) - 1;
+ } else {
+ ret_arr[0] = parseInt(p_Month) - 1;
+ ret_arr[1] = parseInt(p_Year);
+ }
+ } else if (incr == 1) {
+ // F O R W A R D
+ if (p_Month == 11) {
+ ret_arr[0] = 0;
+ ret_arr[1] = parseInt(p_Year) + 1;
+ } else {
+ ret_arr[0] = parseInt(p_Month) + 1;
+ ret_arr[1] = parseInt(p_Year);
+ }
+ }
+ return ret_arr;
+}
+
+// This is for compatibility with Navigator 3, we have to create and discard one object
+// before the prototype object exists.
+new Calendar();
+
+Calendar.prototype.getMonthlyCalendarCode = function() {
+ var vCode = "";
+ var vHeader_Code = "";
+ var vData_Code = "";
+
+ // Begin Table Drawing code here..
+ vCode += ('<div align="center"><table border="1" bgcolor="' + this.gBGColor +
+ "\" style='font-size:" + fontsize + "pt;'>");
+
+ vHeader_Code = this.cal_header();
+ vData_Code = this.cal_data();
+ vCode += (vHeader_Code + vData_Code);
+
+ vCode += '</table></div>';
+
+ return vCode;
+}
+
+Calendar.prototype.show = function() {
+ var vCode = "";
+
+ var vDate = new Date();
+ vDate.setMonth(this.gMonth);
+ vDate.setFullYear(this.gYear);
+ var vNowMonth = gNow.getMonth();
+ var vNowYear = gNow.getFullYear();
+ var yOK=!ggInactive||vNowYear<vDate.getFullYear()?1:0;
+ var mOK=!ggInactive||(yOK||
+ (vNowYear<=vDate.getFullYear()&&vNowMonth<vDate.getMonth()))?1:0;
+
+ // build content into global var ggWinContent
+ ggWinContent += ('<div style="font-family:\'' + fontface + '\';font-weight:bold;'
+ +'font-size:' + fontsize + 'pt;text-align:center;">');
+ ggWinContent += (this.gMonthName + ' ' + this.gYear);
+ ggWinContent += '</div>';
+
+ // Show navigation buttons
+ var prevMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, -1);
+ var prevMM = prevMMYYYY[0];
+ var prevYYYY = prevMMYYYY[1];
+
+ var nextMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, 1);
+ var nextMM = nextMMYYYY[0];
+ var nextYYYY = nextMMYYYY[1];
+
+ ggWinContent += ('<table width="100%" border="1" cellspacing="0" cellpadding="0" '
+ +'bgcolor="#e0e0e0" style="font-size:' + fontsize
+ +'pt;"><tr><td align="center">');
+ ggWinContent += ('['
+ +(yOK?'<a href="javascript:void(0);" '
+ +'title="Go back one year" '
+ +'onmouseover="window.status=\'Go back one year\'; return true;" '
+ +'onmouseout="window.status=\'\'; return true;" '
+ +'onclick="Build(\'' + this.gReturnItem + '\', \'' + this.gMonth + '\', \''
+ +(parseInt(this.gYear)-1) + '\', \'' + this.gFormat + '\');"'
+ +'>':'')
+ +'<<Year'
+ +(yOK?'</a>':'')
+ +']</td><td align="center">');
+ ggWinContent += ('['
+ +(mOK?'<a href="javascript:void(0);" '
+ +'title="Go back one month" '
+ +'onmouseover="window.status=\'Go back one month\'; return true;" '
+ +'onmouseout="window.status=\'\'; return true;" '
+ +'onclick="Build(\'' + this.gReturnItem + '\', \'' + prevMM + '\', \''
+ +prevYYYY + '\', \'' + this.gFormat + '\');"'
+ +'>':'')
+ +'<Mon'
+ +(mOK?'</a>':'')
+ +']</td><td align="center">');
+ ggWinContent += ' </td><td align="center">';
+ ggWinContent += ('[<a href="javascript:void(0);" '
+ +'title="Go forward one month" '
+ +'onmouseover="window.status=\'Go forward one month\'; return true;" '
+ +'onmouseput="window.status=\'\'; return true;" '
+ +'onclick="Build(\'' + this.gReturnItem + '\', \'' + nextMM + '\', \''
+ +nextYYYY + '\', \'' + this.gFormat + '\');"'
+ +'>Mon></a>]</td><td align="center">');
+ ggWinContent += ('[<a href="javascript:void(0);" '
+ +'title="Go forward one year" '
+ +'onmouseover="window.status=\'Go forward one year\'; return true;" '
+ +'onmouseout="window.status=\'\'; return true;" '
+ +'onClick="Build(\'' + this.gReturnItem + '\', \'' + this.gMonth + '\', \''
+ +(parseInt(this.gYear)+1) + '\', \'' + this.gFormat + '\');"'
+ +'>Year>></a>]</td></tr></table><div style="font-size:3px;">'
+ +' </div>');
+
+ // Get the complete calendar code for the month, and add it to the content var
+ vCode = this.getMonthlyCalendarCode();
+ ggWinContent += vCode;
+}
+
+Calendar.prototype.showY = function() {
+ var vCode = "";
+ var i;
+
+ ggWinContent += ('<div style="font-family:\'' + fontface + '\';font-weight:bold;'
+ +'font-size:' + (fontsize+1) +'pt;text-align:center;">' + this.gYear +'</div>');
+
+ var vDate = new Date();
+ vDate.setDate(1);
+ vDate.setFullYear(this.gYear);
+ var vNowYear = gNow.getFullYear();
+ var yOK=!ggInactive||vNowYear<vDate.getFullYear()?1:0;
+
+ // Show navigation buttons
+ var prevYYYY = parseInt(this.gYear) - 1;
+ var nextYYYY = parseInt(this.gYear) + 1;
+
+ ggWinContent += ('<table width="100%" border="1" cellspacing="0" cellpadding="0" '
+ +'bgcolor="#e0e0e0" style="font-size:' + fontsize + 'pt;"><tr><td '
+ +'align="center">');
+ ggWinContent += ('['
+ +(yOK?'<a href="javascript:void(0);" '
+ +'title="Go back one year" '
+ +'onmouseover="window.status=\'Go back one year\'; return true;" '
+ +'onmouseout="window.status=\'\'; return true;" '
+ +'onclick="Build(\'' + this.gReturnItem + '\', null, \'' + prevYYYY + '\', \''
+ +this.gFormat + '\');">':'')
+ +'<<Year'
+ +(yOK?'<a>':'')
+ +']</td><td align="center">');
+ ggWinContent += ' </td><td align="center">';
+ ggWinContent += ('[<a href="javascript:void(0);" '
+ +'title="Go forward one year" '
+ +'onmouseover="window.status=\'Go forward one year\'; return true;" '
+ +'onmouseout="window.status=\'\'; return true;" '
+ +'onclick="Build(\'' + this.gReturnItem + '\', null, \'' + nextYYYY + '\', \''
+ +this.gFormat + '\');">Year>></a>]</td></tr></table>');
+
+ // Get the complete calendar code for each month.
+ // start a table and first row in the table
+ ggWinContent += ('<table width="100%" border="0" cellspacing="0" cellpadding="2" '
+ +'style="font-size:' + fontsize + 'pt;"><tr>');
+ for (i=0; i<12; i++) {
+ // start the table cell
+ ggWinContent += '<td align="center" valign="top">';
+ this.gMonth = i;
+ this.gMonthName = Calendar.get_month(this.gMonth);
+ vCode = this.getMonthlyCalendarCode();
+ ggWinContent += (this.gMonthName + '/' + this.gYear + '<div '
+ +'style="font-size:2px;"> </div>');
+ ggWinContent += vCode;
+ ggWinContent += '</td>';
+ if (i == 3 || i == 7) ggWinContent += '</tr><tr>';
+ }
+ ggWinContent += '</tr></table>';
+}
+
+Calendar.prototype.cal_header = function() {
+ var vCode = '<tr>';
+ vCode += ('<td width="14%" style="font-family:' + fontface + ';color:'
+ +this.gHeaderColor + ';font-weight:bold;">Sun</td>');
+ vCode += ('<td width="14%" style="font-family:' + fontface + ';color:'
+ +this.gHeaderColor + ';font-weight:bold;">Mon</td>');
+ vCode += ('<td width="14%" style="font-family:' + fontface + ';color:'
+ +this.gHeaderColor + ';font-weight:bold;">Tue</td>');
+ vCode += ('<td width="14%" style="font-family:' + fontface + ';color:'
+ +this.gHeaderColor + ';font-weight:bold;">Wed</td>');
+ vCode += ('<td width="14%" style="font-family:' + fontface + ';color:'
+ +this.gHeaderColor + ';font-weight:bold;">Thu</td>');
+ vCode += ('<td width="14%" style="font-family:' + fontface + ';color:'
+ +this.gHeaderColor + ';font-weight:bold;">Fri</td>');
+ vCode += ('<td width="16%" style="font-family:' + fontface + ';color:'
+ +this.gHeaderColor + ';font-weight:bold;">Sat</td>');
+ vCode += '</tr>';
+ return vCode;
+}
+
+Calendar.prototype.cal_data = function() {
+ var vDate = new Date();
+ vDate.setDate(1);
+ vDate.setMonth(this.gMonth);
+ vDate.setFullYear(this.gYear);
+
+ var vNowDay = gNow.getDate();
+ var vNowMonth = gNow.getMonth();
+ var vNowYear = gNow.getFullYear();
+
+ var yOK=!ggInactive||vNowYear<=vDate.getFullYear()?1:0;
+ var mOK=!ggInactive||vNowYear<vDate.getFullYear()||
+ (vNowYear==vDate.getFullYear()&&vNowMonth<=vDate.getMonth())?1:0;
+ var ymOK=yOK&&mOK?1:0;
+ var dOK=!ggInactive||vNowYear<vDate.getFullYear()||vNowMonth<vDate.getMonth()?1:0;
+
+ var vFirstDay=vDate.getDay();
+ var vDay=1;
+ var vLastDay=Calendar.get_daysofmonth(this.gMonth, this.gYear);
+ var vOnLastDay=0;
+ var vCode = '<tr>';
+ var i,j,k,m;
+ var orig = eval("document." + this.gReturnItem + ".value").toString();
+ /*
+ Get day for the 1st of the requested month/year..
+ Place as many blank cells before the 1st day of the month as necessary.
+ */
+ for (i=0; i<vFirstDay; i++) { vCode +=
+ ('<td width="14%"' + this.write_weekend_string(i)
+ +'style="font-family:\'' + fontface + '\';text-align:center;"> </td>');
+ }
+
+ // Write rest of the 1st week
+ for (j=vFirstDay; j<7; j++) { vCode +=
+ ('<td width="14%"' + this.write_weekend_string(j) +'style="font-family:\''
+ + fontface + '\';text-align:center;">'
+ +((ymOK)&&(vDay>=vNowDay||dOK)?'<a href="javascript:void(0);" '
+ +'title="set date to ' + this.format_data(vDay) + '" '
+ +'onmouseover="window.status=\'set date to ' + this.format_data(vDay) + '\'; '
+ +'return true;" '
+ +'onmouseout="window.status=\'\'; return true;" '
+ +'onclick="document.' + this.gReturnItem + '.value=\'' + this.format_data(vDay)
+ +'\';ggPosX= -1;ggPosY= -1;' + OLfnRef + 'cClick();'
+ +'if((ggOnChange)&&(document.' + this.gReturnItem + '.value!=\'' + orig
+ +'\'))ggOnChange();">':'')
+ + this.format_day(vDay)
+ +((ymOK)&&(vDay>=vNowDay||dOK)?'</a>':'')
+ +'</td>');
+ vDay += 1;
+ }
+ vCode += '</tr>';
+
+ // Write the rest of the weeks
+ for (k=2; k<7; k++) {
+ vCode += '<tr>';
+ for (j=0; j<7; j++) { vCode +=
+ ('<td width="14%"' + this.write_weekend_string(j)
+ +'style="font-family:\'' + fontface + '\';text-align:center;">'
+ +((ymOK)&&(vDay>=vNowDay||dOK)?'<a '
+ +'href="javascript:void(0);" '
+ +'title="set date to ' + this.format_data(vDay) + '" '
+ +'onmouseover="window.status=\'set date to ' + this.format_data(vDay)
+ +'\'; return true;" '
+ +'onmouseout="window.status=\'\'; return true;" '
+ +'onclick="document.' + this.gReturnItem + '.value=\''
+ + this.format_data(vDay) + '\';ggPosX= -1;ggPosY= -1;'
+ + OLfnRef + 'cClick();'
+ +'if((ggOnChange)&&(document.' + this.gReturnItem + '.value!=\''
+ +orig + '\'))ggOnChange();">':'')
+ + this.format_day(vDay)
+ +((ymOK)&&(vDay>=vNowDay||dOK)?'</a>':'')
+ +'</td>');
+ vDay += 1;
+ if (vDay > vLastDay) {
+ vOnLastDay = 1;
+ break;
+ }
+ }
+ if (j == 6) vCode += '</tr>';
+ if (vOnLastDay == 1) break;
+ }
+
+ // Fill up the rest of last week with proper blanks, so that we get proper square blocks
+ for (m=1; m<(7-j); m++) { vCode +=
+ ('<td width="14%"' + this.write_weekend_string(j+m) + 'style="font-family:\''
+ + fontface + '\';color:gray;text-align:center;"> </td>');
+ }
+ return vCode;
+}
+
+Calendar.prototype.format_day = function(vday) {
+ var vNowDay = gNow.getDate();
+ var vNowMonth = gNow.getMonth();
+ var vNowYear = gNow.getFullYear();
+
+ if (vday == vNowDay && this.gMonth == vNowMonth && this.gYear == vNowYear)
+ return ('<span style="color:red;font-weight:bold;">' + vday + '</span>');
+ else
+ return (vday);
+}
+
+Calendar.prototype.write_weekend_string = function(vday) {
+ var i;
+
+ // Return special formatting for the weekend day.
+ for (i=0; i<weekend.length; i++) {
+ if (vday == weekend[i])
+ return (' bgcolor="' + weekendColor + '"');
+ }
+
+ return "";
+}
+
+Calendar.prototype.format_data = function(p_day) {
+ var vData;
+ var vMonth = 1 + this.gMonth;
+ vMonth = (vMonth.toString().length < 2) ? "0" + vMonth : vMonth;
+ var vMon = Calendar.get_month(this.gMonth).substr(0,3).toUpperCase();
+ var vFMon = Calendar.get_month(this.gMonth).toUpperCase();
+ var vY4 = new String(this.gYear);
+ var vY2 = new String(this.gYear.substr(2,2));
+ var vDD = (p_day.toString().length < 2) ? "0" + p_day : p_day;
+
+ switch (this.gFormat) {
+ case "MM\/DD\/YYYY" :
+ vData = vMonth + "\/" + vDD + "\/" + vY4;
+ break;
+ case "MM\/DD\/YY" :
+ vData = vMonth + "\/" + vDD + "\/" + vY2;
+ break;
+ case "MM-DD-YYYY" :
+ vData = vMonth + "-" + vDD + "-" + vY4;
+ break;
+ case "YYYY-MM-DD" :
+ vData = vY4 + "-" + vMonth + "-" + vDD;
+ break;
+ case "MM-DD-YY" :
+ vData = vMonth + "-" + vDD + "-" + vY2;
+ break;
+ case "DD\/MON\/YYYY" :
+ vData = vDD + "\/" + vMon + "\/" + vY4;
+ break;
+ case "DD\/MON\/YY" :
+ vData = vDD + "\/" + vMon + "\/" + vY2;
+ break;
+ case "DD-MON-YYYY" :
+ vData = vDD + "-" + vMon + "-" + vY4;
+ break;
+ case "DD-MON-YY" :
+ vData = vDD + "-" + vMon + "-" + vY2;
+ break;
+ case "DD\/MONTH\/YYYY" :
+ vData = vDD + "\/" + vFMon + "\/" + vY4;
+ break;
+ case "DD\/MONTH\/YY" :
+ vData = vDD + "\/" + vFMon + "\/" + vY2;
+ break;
+ case "DD-MONTH-YYYY" :
+ vData = vDD + "-" + vFMon + "-" + vY4;
+ break;
+ case "DD-MONTH-YY" :
+ vData = vDD + "-" + vFMon + "-" + vY2;
+ break;
+ case "DD\/MM\/YYYY" :
+ vData = vDD + "\/" + vMonth + "\/" + vY4;
+ break;
+ case "DD\/MM\/YY" :
+ vData = vDD + "\/" + vMonth + "\/" + vY2;
+ break;
+ case "DD-MM-YYYY" :
+ vData = vDD + "-" + vMonth + "-" + vY4;
+ break;
+ case "DD-MM-YY" :
+ vData = vDD + "-" + vMonth + "-" + vY2;
+ break;
+ case "DD.MM.YYYY" :
+ vData = vDD + "." + vMonth + "." + vY4;
+ break;
+ case "DD.MM.YY" :
+ vData = vDD + "." + vMonth + "." + vY2;
+ break;
+ default :
+ vData = vMonth + "\/" + vDD + "\/" + vY4;
+ }
+
+ return vData;
+}
+
+function Build(p_item, p_month, p_year, p_format) {
+ var gCal = new Calendar(p_item, p_month, p_year, p_format);
+
+ // Customize your Calendar here..
+ gCal.gBGColor="white";
+ gCal.gLinkColor="black";
+ gCal.gTextColor="black";
+ gCal.gHeaderColor="darkgreen";
+
+ // initialize the content string
+ ggWinContent = "";
+
+ // Check for DRAGGABLE support
+ if (typeof ol_draggable == 'undefined') DRAGGABLE = DONOTHING;
+
+ // Choose appropriate show function
+ if (gCal.gYearly) {
+ // Note: you can set ggPosX and ggPosY as part of the onclick javascript
+ // code before you call the show_yearly_calendar function:
+ // onclick="ggPosX=20;ggPosY=5;show_yearly_calendar(...);"
+ if (OLns6) {
+ if (ggPosX == -1) ggPosX = 20;
+ if (ggPosY == -1) ggPosY = 10;
+ }
+ if (fontsize == 8) fontsize = 6;
+ // generate the calendar
+ gCal.showY();
+ } else {
+ if (fontsize == 6) fontsize = 8;
+ gCal.show();
+ }
+
+ // Clear any previous EXCLUSIVE setting
+ o3_exclusive=0;
+ // If X and Y positions are not specified use MIDX and RELY
+ if (ggPosX == -1 && ggPosY == -1) {
+ overlib(ggWinContent, AUTOSTATUSCAP, STICKY, EXCLUSIVE, DRAGGABLE,
+ CLOSECLICK, TEXTSIZE,'8pt', CAPTIONSIZE,'8pt', CLOSESIZE,'8pt',
+ CAPTION,'Select a date', MIDX,0, RELY,10);
+ // Otherwise use FIXX and FIXY
+ } else {
+ // Make sure popup is on screen
+ var X = ((ggPosX < 10)?0:ggPosX - 10), Y = ((ggPosY < 10)?0:ggPosY - 10);
+ window.scroll(X, Y);
+ // Put up the calendar
+ overlib(ggWinContent, AUTOSTATUSCAP, STICKY, EXCLUSIVE, DRAGGABLE,
+ CLOSECLICK, TEXTSIZE,'8pt', CAPTIONSIZE,'8pt', CLOSESIZE,'8pt',
+ CAPTION,'Select a date', FIXX,ggPosX, FIXY,ggPosY);
+ // Reset the position variables
+ ggPosX = -1; ggPosY = -1;
+ }
+}
+
+function show_calendar() {
+ var p_item // Return Item.
+ var p_month // 0-11 for Jan-Dec; 12 for All Months.
+ var p_year // 4-digit year
+ var p_format // Date format (YYYY-MM-DD, DD/MM/YYYY, ...)
+ fontsize = 8;
+
+ p_item = arguments[0];
+ if (arguments[1] == "" || arguments[1] == null || arguments[1] == '12')
+ p_month = new String(gNow.getMonth());
+ else
+ p_month = arguments[1];
+ if (arguments[2] == "" || arguments[2] == null)
+ p_year = new String(gNow.getFullYear().toString());
+ else
+ p_year = arguments[2];
+ if (arguments[3] == "" || arguments[3] == null)
+ p_format = "YYYY-MM-DD";
+ else
+ p_format = arguments[3];
+
+ if (OLns4) return overlib('Sorry, your browser does not support this feature. '
+ +'Manually enter<br>' + p_format,
+ FGCOLOR,'#ffffcc', TEXTSIZE,2, STICKY, NOCLOSE, OFFSETX,-10, OFFSETY,-10,
+ WIDTH,110, BASE,2);
+
+ Build(p_item, p_month, p_year, p_format);
+}
+
+function show_yearly_calendar() {
+ var p_item // Return Item.
+ var p_year // 4-digit year
+ var p_format // Date format (YYYY-MM-DD, DD/MM/YYYY, ...)
+
+ p_item = arguments[0];
+ if (arguments[1] == "" || arguments[1] == null)
+ p_year = new String(gNow.getFullYear().toString());
+ else
+ p_year = arguments[1];
+ if (arguments[2] == "" || arguments[2] == null)
+ p_format = "YYYY-MM-DD";
+ else
+ p_format = arguments[2];
+
+ if (OLns4) return overlib('Sorry, your browser does not support this feature. '
+ +'Manually enter<br>' + p_format,
+ FGCOLOR,'#ffffcc', TEXTSIZE,2, STICKY, NOCLOSE, OFFSETX,-10, OFFSETY,-10,
+ WIDTH,110, BASE,2);
+
+ Build(p_item, null, p_year, p_format);
+}
diff --git a/src/extras/sos-html-logs/share/html/overlib/calendarmws_lang.js b/src/extras/sos-html-logs/share/html/overlib/calendarmws_lang.js new file mode 100644 index 00000000..6232e789 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/calendarmws_lang.js @@ -0,0 +1,700 @@ +/*
+ calendermws_lang.js - Script with multi-language support for generating calender popups
+ and selecting dates for form submissions.
+ See http://www.macridesweb.com/oltest/calendarmws_lang.html for a demonstration.
+ Initial (calendarmws.js): November 9, 2003 - Last Revised: November 23, 2006
+
+****
+ Original: Kedar R. Bhave (softricks@hotmail.com)
+ Web Site: http://www.softricks.com
+ (uses window popups)
+
+ Modifications and customizations to work with the overLIB v3.50
+ Author: James B. O'Connor (joconnor@nordenterprises.com)
+ Web Site: http://www.nordenterprises.com
+ Developed for use with http://home-owners-assoc.com
+ Note: while overlib works fine with Netscape 4, this function does not work very
+ well, since portions of the "over" div end up under other fields on the form and
+ cannot be seen. If you want to use this with NS4, you'll need to change the
+ positioning in the overlib() call to make sure the "over" div gets positioned
+ away from all other form fields
+ The O'Connor script and many more are available free online at:
+ The JavaScript Source!! http://javascript.internet.com
+
+ Further modifications made by Foteos Macrides (http://www.macridesweb.com/oltest/),
+ Bodo Hantschmann (http://www.hantschmann.org) - multi-language support, and
+ Bill McCormick (wpmccormick@freeshell.org) - draggable support, for overlibmws.
+
+ Requires sprintf.js from the overlibmws distribution.
+*/
+
+var ggPosX = -1;
+var ggPosY = -1;
+var ggInactive = 0;
+var ggOnChange = null;
+var ggLang = 'eng';
+
+var ggWinContent = "";
+
+var weekend = [0,6];
+var weekendColor = "#e0e0e0";
+var fontface = "Verdana";
+var fontsize = 8; // in "pt" units; used with "font-size" style element
+
+var calmsg = new Array();
+var datFormat = new Array();
+var CalendarMonths = new Array();
+var CalendarWeekdays = new Array();
+
+/* -----------------------------------------------------------------------------------------
+ Languages (set via the value of the ggLang global)
+
+ 'eng' - English
+ 'ger' - German
+ 'esp' - Spanish
+ 'dut' - Dutch / Netherlands
+
+ for more languages:
+ greetings from babelfish ;-) (Hint: Use always english as base, that gives the best
+ results.
+ ----------------------------------------------------------------------------------------- */
+
+/* -------------------------------
+ English
+ ------------------------------- */
+calmsg["eng"] = new Array;
+calmsg["eng"][0] = "One year backward";
+calmsg["eng"][1] = "One year forward";
+calmsg["eng"][2] = "One month backward";
+calmsg["eng"][3] = "One month forward";
+calmsg["eng"][4] = "Set date";
+calmsg["eng"][5] = "Select date";
+calmsg["eng"][6] = "Your Browser does NOT support this feature. Update asap, please!<br />";
+calmsg["eng"][7] = "Year";
+calmsg["eng"][8] = "Click to close";
+datFormat["eng"] = "MM/DD/YYYY";
+CalendarMonths["eng"] = new Array("January", "February", "March", "April", "May", "June",
+ "July", "August", "September", "October", "November", "December");
+CalendarWeekdays["eng"] = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
+
+/* -------------------------------
+ German
+ ------------------------------- */
+calmsg["ger"] = new Array;
+calmsg["ger"][0] = "Ein Jahr zurück";
+calmsg["ger"][1] = "Ein Jahr vorwärts";
+calmsg["ger"][2] = "Einen Monat zurück";
+calmsg["ger"][3] = "Einen Monat vorwärts";
+calmsg["ger"][4] = "Datum setzen";
+calmsg["ger"][5] = "Datum wählen";
+calmsg["ger"][6] = "Leider unterstützt Ihr Browser dieses Feature nicht. "
+ +"Bitte updaten!<br />";
+calmsg["ger"][7] = "Jahr";
+calmsg["ger"][8] = "Zum schließen klicken";
+datFormat["ger"] = "DD.MM.YYYY";
+CalendarMonths["ger"] = new Array("Januar", "Februar", "März", "April", "Mai", "Juni",
+ "Juli", "August", "September", "Oktober", "November", "Dezember");
+CalendarWeekdays["ger"] = new Array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa");
+
+/* -------------------------------
+ Spanish
+ ------------------------------- */
+calmsg["esp"] = new Array;
+calmsg["esp"][0] = "Un año atras";
+calmsg["esp"][1] = "Un año adelante";
+calmsg["esp"][2] = "Un mes atras";
+calmsg["esp"][3] = "Un mes adelante";
+calmsg["esp"][4] = "Fije la fecha";
+calmsg["esp"][5] = "Seleccione la fecha";
+calmsg["esp"][6] = "Su browser no apoya esta característica. ¡Actualización cuanto antes, "
+ +"por favor!<br />";
+calmsg["esp"][7] = "Año";
+calmsg["esp"][8] = "Tecleo a cerrarse";
+datFormat["esp"] = "DD.MM.YYYY";
+CalendarMonths["esp"] = new Array("Enero", "Febrero", "Marcha", "Abril", "Puede", "Junio",
+ "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
+CalendarWeekdays["esp"] = new Array("Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa");
+
+/* -------------------------------
+ Dutch
+ ------------------------------- */
+calmsg["dut"] = new Array;
+calmsg["dut"][0] = "Één jaar achteruit";
+calmsg["dut"][1] = "Één jaar voorwaarts";
+calmsg["dut"][2] = "Één maand achteruit";
+calmsg["dut"][3] = "Één maand voorwaarts";
+calmsg["dut"][4] = "Overname datum";
+calmsg["dut"][5] = "Selecteer datum";
+calmsg["dut"][6] = "Uw Browser steunt deze eigenschap niet. Update zo vlug mogelijk, "
+ +"tevreden!<br />";
+calmsg["dut"][7] = "Jaar";
+calmsg["dut"][8] = "klik aan het sluiten";
+datFormat["dut"] = "DD.MM.YYYY";
+CalendarMonths["dut"] = new Array("Januari", "Februari", "Maart", "April", "Mei", "Juni",
+ "Juli", "Augustus", "September", "Oktober", "November", "December");
+CalendarWeekdays["dut"] = new Array("Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za");
+
+var gNow = new Date();
+
+Calendar.CellWidth = ["14%", "14%", "14%", "14%", "14%", "14%", "16%"];
+
+// Non-Leap year Month days..
+Calendar.DOMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
+// Leap year Month days..
+Calendar.lDOMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
+
+function Calendar(p_item, p_month, p_year, p_format) {
+ if ((p_month == null) && (p_year == null)) return;
+
+ if (p_month == null) {
+ this.gMonthName = null;
+ this.gMonth = null;
+ this.gYearly = true;
+ } else {
+ this.gMonthName = Calendar.get_month(p_month);
+ this.gMonth = new Number(p_month);
+ this.gYearly = false;
+ }
+
+ this.gYear = p_year;
+ this.gFormat = p_format;
+ this.gBGColor = "white";
+ this.gFGColor = "black";
+ this.gTextColor = "black";
+ this.gHeaderColor = "black";
+ this.gReturnItem = p_item;
+}
+
+Calendar.get_month = Calendar_get_month;
+Calendar.get_daysofmonth = Calendar_get_daysofmonth;
+Calendar.calc_month_year = Calendar_calc_month_year;
+
+function Calendar_get_month(monthNo) {
+ return Calendar.Months[monthNo];
+}
+
+function Calendar_get_daysofmonth(monthNo, p_year) {
+ /*
+ Check for leap year ..
+ 1.Years evenly divisible by four are normally leap years, except for...
+ 2.Years also evenly divisible by 100 are not leap years, except for...
+ 3.Years also evenly divisible by 400 are leap years.
+ */
+ if ((p_year % 4) == 0) {
+ if ((p_year % 100) == 0 && (p_year % 400) != 0)
+ return Calendar.DOMonth[monthNo];
+
+ return Calendar.lDOMonth[monthNo];
+ } else
+ return Calendar.DOMonth[monthNo];
+}
+
+function Calendar_calc_month_year(p_Month, p_Year, incr) {
+ /*
+ Will return an 1-D array with 1st element being the calculated month
+ and second being the calculated year
+ after applying the month increment/decrement as specified by 'incr' parameter.
+ 'incr' will normally have 1/-1 to navigate thru the months.
+ */
+ var ret_arr = new Array();
+
+ if (incr == -1) {
+ // B A C K W A R D
+ if (p_Month == 0) {
+ ret_arr[0] = 11;
+ ret_arr[1] = parseInt(p_Year) - 1;
+ } else {
+ ret_arr[0] = parseInt(p_Month) - 1;
+ ret_arr[1] = parseInt(p_Year);
+ }
+ } else if (incr == 1) {
+ // F O R W A R D
+ if (p_Month == 11) {
+ ret_arr[0] = 0;
+ ret_arr[1] = parseInt(p_Year) + 1;
+ } else {
+ ret_arr[0] = parseInt(p_Month) + 1;
+ ret_arr[1] = parseInt(p_Year);
+ }
+ }
+ return ret_arr;
+}
+
+function Calendar_calc_month_year(p_Month, p_Year, incr) {
+ /*
+ Will return an 1-D array with 1st element being the calculated month
+ and second being the calculated year
+ after applying the month increment/decrement as specified by 'incr' parameter.
+ 'incr' will normally have 1/-1 to navigate thru the months.
+ */
+ var ret_arr = new Array();
+
+ if (incr == -1) {
+ // B A C K W A R D
+ if (p_Month == 0) {
+ ret_arr[0] = 11;
+ ret_arr[1] = parseInt(p_Year) - 1;
+ } else {
+ ret_arr[0] = parseInt(p_Month) - 1;
+ ret_arr[1] = parseInt(p_Year);
+ }
+ } else if (incr == 1) {
+ // F O R W A R D
+ if (p_Month == 11) {
+ ret_arr[0] = 0;
+ ret_arr[1] = parseInt(p_Year) + 1;
+ } else {
+ ret_arr[0] = parseInt(p_Month) + 1;
+ ret_arr[1] = parseInt(p_Year);
+ }
+ }
+ return ret_arr;
+}
+
+// This is for compatibility with Navigator 3, we have to create and discard one object
+// before the prototype object exists.
+new Calendar();
+
+Calendar.prototype.getMonthlyCalendarCode = function() {
+ var vCode = "";
+ var vHeader_Code = "";
+ var vData_Code = "";
+
+ // Begin Table Drawing code here..
+ vCode += ('<div align="center"><table border="1" bgcolor="' + this.gBGColor
+ +'" style="font-size:' + fontsize + 'pt;">');
+
+ vHeader_Code = this.cal_header();
+ vData_Code = this.cal_data();
+ vCode += (vHeader_Code + vData_Code);
+
+ vCode += '</table></div>';
+
+ return vCode;
+}
+
+Calendar.prototype.show = function() {
+ var vCode = "";
+
+ var vDate = new Date();
+ vDate.setMonth(this.gMonth);
+ vDate.setFullYear(this.gYear);
+ var vNowMonth = gNow.getMonth();
+ var vNowYear = gNow.getFullYear();
+ var yOK=!ggInactive||vNowYear<vDate.getFullYear()?1:0;
+ var mOK=!ggInactive||(yOK||
+ (vNowYear<=vDate.getFullYear()&&vNowMonth<vDate.getMonth()))?1:0;
+
+ // build content into global var ggWinContent
+ ggWinContent += sprintf('<div style="font-family:\'%s\';font-weight:bold;'
+ +'font-size:%spt;text-align:center;">%s %s</div>',
+ fontface, fontsize, this.gMonthName, this.gYear);
+
+ // Show navigation buttons
+ var prevMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, -1);
+ var prevMM = prevMMYYYY[0];
+ var prevYYYY = prevMMYYYY[1];
+
+ var nextMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, 1);
+ var nextMM = nextMMYYYY[0];
+ var nextYYYY = nextMMYYYY[1];
+
+ var nav_cell = '<td align="%s"> [<a href="javascript:void(0);" title="%s" '
+ +'onmouseover="window.status=\'%s\'; return true;" '
+ +'onmouseout="window.status=\'\'; return true;" '
+ +'onclick="Build(\'%s\',\'%s\',\'%s\',\'%s\');">%s%s%s<\/a>] </td>';
+ var nav_cell_inactive = '<td align="%s"> [%s%s] </td>'
+
+ ggWinContent += '<table width="100%" border="0" cellspacing="0" cellpadding="0" '
+ +'bgcolor="#e0e0e0" style="font-size:' + fontsize + 'pt;">';
+ ggWinContent += '<tr>';
+ ggWinContent += yOK?sprintf(nav_cell,
+ 'left', calmsg[ggLang][0], calmsg[ggLang][0],
+ this.gReturnItem, this.gMonth, (parseInt(this.gYear)-1), this.gFormat,
+ '<<', (parseInt(this.gYear)-1), ''):
+ sprintf(nav_cell_inactive, 'left', '<<', (parseInt(this.gYear)-1));
+ ggWinContent += sprintf(nav_cell,
+ 'right', calmsg[ggLang][1], calmsg[ggLang][1],
+ this.gReturnItem, this.gMonth, (parseInt(this.gYear)+1), this.gFormat,
+ '', (parseInt(this.gYear)+1), '>>');
+ ggWinContent += '</tr><tr>';
+ ggWinContent += mOK?sprintf(nav_cell,
+ 'left', calmsg[ggLang][2], calmsg[ggLang][2],
+ this.gReturnItem, prevMM, prevYYYY, this.gFormat, '<',
+ Calendar.Months[prevMM], ''):
+ sprintf(nav_cell_inactive, '<', Calendar.Months[prevMM]);
+ ggWinContent += sprintf(nav_cell,
+ 'right', calmsg[ggLang][3], calmsg[ggLang][3],
+ this.gReturnItem, nextMM, nextYYYY, this.gFormat, '',
+ Calendar.Months[nextMM], '>');
+ ggWinContent += '</tr></table><div style="font-size:3px;"> </div>';
+
+ // Get the complete calendar code for the month, and add it to the content var
+ vCode = this.getMonthlyCalendarCode();
+ ggWinContent += vCode;
+}
+
+Calendar.prototype.showY = function() {
+ var vCode = "";
+ var i;
+
+ ggWinContent += sprintf(
+ '<div style="font-family:\'%s\';font-weight:bold;font-size:%spt;'
+ +'text-align:center;">%s</div>', fontface, fontsize+1, this.gYear);
+ // Show navigation buttons
+ var prevYYYY = parseInt(this.gYear) - 1;
+ var nextYYYY = parseInt(this.gYear) + 1;
+
+ var vDate = new Date();
+ vDate.setFullYear(this.gYear);
+ var vCode = "";
+ var vNowYear = gNow.getFullYear();
+ var yOK=!ggInactive||vNowYear<vDate.getFullYear()?1:0;
+
+ ggWinContent += '<table width="100%" ' + sprintf(
+ 'border="1" cellspacing="0" cellpadding="0" bgcolor="%s" '
+ +'style="font-size:%spt;">', '#e0e0e0', fontsize);
+ ggWinContent += '<tr>';
+ ggWinContent += yOK?sprintf(
+ '<td align="center">[<a href="javascript:void(0);" title="%s" '
+ +'onmouseover="window.status=\'%s\'; return true;" '
+ +'onmouseout="window.status=\'\'; return true;" '
+ +'onclick="Build(\'%s\', null, \'%s\', \'%s\');"><<%s</a>]</td>',
+ calmsg[ggLang][0], calmsg[ggLang][0], this.gReturnItem,
+ prevYYYY, this.gFormat, (parseInt(this.gYear)-1)):
+ sprintf('<td align="center">[<<%s]</td>',(parseInt(this.gYear)-1));
+ ggWinContent += '<td align="center"> </td>';
+ ggWinContent += sprintf(
+ '<td align="center">[<a href="javascript:void(0);" title="%s" '
+ +'onmouseover="window.status=\'%s\'; return true;" '
+ +'onmouseout="window.status=\'\'; return true;" '
+ +'onclick="Build(\'%s\', null, \'%s\', \'%s\');">%s>></a>]</td>',
+ calmsg[ggLang][1], calmsg[ggLang][1], this.gReturnItem,
+ nextYYYY, this.gFormat, (parseInt(this.gYear)+1));
+ ggWinContent += '</tr></table>';
+
+ // Get the complete calendar code for each month.
+ // start a table and first row in the table
+ ggWinContent += '<table width="100%" border="0" cellspacing="0" cellpadding="2" '
+ +'style="font-size:' + fontsize + 'pt;"><tr>';
+ for (i=0; i<12; i++) {
+ // start the table cell
+ ggWinContent += '<td align="center" valign="top">';
+ this.gMonth = i;
+ this.gMonthName = Calendar.get_month(this.gMonth);
+ vCode = this.getMonthlyCalendarCode();
+ ggWinContent += (this.gMonthName + '/' + this.gYear+ '<div '
+ +'style="font-size:2px;"> </div>');
+ ggWinContent += vCode;
+ ggWinContent += '</td>';
+ if (i == 3 || i == 7) ggWinContent += '</tr><tr>';
+ }
+ ggWinContent += '</tr></table>';
+}
+
+Calendar.prototype.cal_header = function() {
+ var vCode = '<tr>';
+ for (i=0; i<7; i++) { vCode += sprintf(
+ '<td width="%s" style="font-family:\'%s\';font-weight:bold;color:%s; '
+ +'text-align:center;">%s</td>',
+ Calendar.CellWidth[i], fontface, this.gHeaderColor, Calendar.Weekdays[i]);
+ }
+ return (vCode + '</tr>');
+}
+
+Calendar.prototype.cal_data = function() {
+ var vDate = new Date();
+ vDate.setDate(1);
+ vDate.setMonth(this.gMonth);
+ vDate.setFullYear(this.gYear);
+
+ var vNowDay = gNow.getDate();
+ var vNowMonth = gNow.getMonth();
+ var vNowYear = gNow.getFullYear();
+
+ var yOK=!ggInactive||vNowYear<=vDate.getFullYear()?1:0;
+ var mOK=!ggInactive||vNowYear<vDate.getFullYear()||
+ (vNowYear==vDate.getFullYear()&&vNowMonth<=vDate.getMonth())?1:0;
+ var ymOK=yOK&&mOK?1:0;
+ var dOK=!ggInactive||vNowYear<vDate.getFullYear()||vNowMonth<vDate.getMonth()?1:0;
+
+ var vFirstDay=vDate.getDay();
+ var vDay=1;
+ var vLastDay=Calendar.get_daysofmonth(this.gMonth, this.gYear);
+ var vOnLastDay=0;
+ var vCode = '<tr>';
+ var i,j,k,m;
+ var orig = eval("document." + this.gReturnItem + ".value").toString();
+ /*
+ Get day for the 1st of the requested month/year..
+ Place as many blank cells before the 1st day of the month as necessary.
+ */
+ for (i=0; i<vFirstDay; i++) { vCode += sprintf(
+ '<td width="%s" %s style="font-family:\'%s\';text-align:center;"> </td>',
+ Calendar.CellWidth[0], this.write_weekend_string(i),fontface);
+ }
+ // Write rest of the 1st week
+ for (j=vFirstDay; j<7; j++) { vCode += (ymOK)&&(vDay>=vNowDay||dOK)?sprintf(
+ '<td width="%s" %s style="font-family:\'%s\';text-align:center;"><a '
+ +'href="javascript:void(0);" title="%s: %s" '
+ +'onmouselver="window.status=\'%s: %s\'; return true;" '
+ +'onmouseout="window.status=\'\'; return true;" '
+ +'onclick="document.%s.value=\'%s\';ggPosX= -1;ggPosY= -1;%scClick();'
+ +'if((ggOnChange)&&(document.%s.value!=\'%s\'))ggOnChange();">%s</a></td>',
+ Calendar.CellWidth[j+1], this.write_weekend_string(j), fontface,
+ calmsg[ggLang][4], this.format_data(vDay), calmsg[ggLang][4],
+ this.format_data(vDay), this.gReturnItem, this.format_data(vDay), OLfnRef,
+ this.gReturnItem, orig, this.format_day(vDay)):
+ sprintf('<td width="%s" %s style="font-family:\'%s\';text-align:center;">'
+ +'%s</td>', Calendar.CellWidth[j+1], this.write_weekend_string(j), fontface,
+ this.format_day(vDay));
+ vDay += 1;
+ }
+ vCode += '</tr>';
+
+ // Write the rest of the weeks
+ for (k=2; k<7; k++) {
+ vCode += '<tr>';
+ for (j=0; j<7; j++) { vCode += (ymOK)&&(vDay>=vNowDay||dOK)?sprintf(
+ '<td width="%s" %s style="font-family:\'%s\';text-align:center;"><a '
+ +'href="javascript:void(0);" title="%s: %s" '
+ +'onmouseover="window.status=\'%s: %s\'; return true;" '
+ +'onmouseout="window.status=\'\'; return true;" '
+ +'onclick="document.%s.value=\'%s\';ggPosX= -1;ggPosY= -1;%scClick();if'
+ +'((ggOnChange)&&(document.%s.value!=\'%s\'))ggOnChange();">%s</a></td>',
+ Calendar.CellWidth[j+1], this.write_weekend_string(j), fontface,
+ calmsg[ggLang][4], this.format_data(vDay),calmsg[ggLang][4],
+ this.format_data(vDay), this.gReturnItem, this.format_data(vDay),
+ OLfnRef, this.gReturnItem, orig, this.format_day(vDay)):sprintf(
+ '<td width="%s" %s style="font-family:\'%s\';text-align:center;">'
+ +'%s</td>', Calendar.CellWidth[j+1], this.write_weekend_string(j),
+ fontface, this.format_day(vDay));
+ vDay += 1;
+ if (vDay > vLastDay) {
+ vOnLastDay = 1;
+ break;
+ }
+ }
+ if (j == 6) vCode += '</tr>';
+ if (vOnLastDay == 1) break;
+ }
+
+ // Fill up the rest of last week with proper blanks, so that we get proper square blocks
+ for (m=1; m<(7-j); m++) { vCode += sprintf(
+ '<td width="%s" %s style="font-family:\'%s\';color:gray;text-align:center;"'
+ +'> </td>',
+ Calendar.CellWidth[m+1], this.write_weekend_string(j+m), fontface);
+ }
+ return vCode;
+}
+
+Calendar.prototype.format_day = function(vday) {
+ var vNowDay = gNow.getDate();
+ var vNowMonth = gNow.getMonth();
+ var vNowYear = gNow.getFullYear();
+
+ if (vday == vNowDay && this.gMonth == vNowMonth && this.gYear == vNowYear)
+ return ('<span style="color:red;font-weight:bold;">' + vday + '</span>');
+ else
+ return (vday);
+}
+
+Calendar.prototype.write_weekend_string = function(vday) {
+ var i;
+
+ // Return special formatting for the weekend day.
+ for (i=0; i<weekend.length; i++) {
+ if (vday == weekend[i])
+ return (' bgcolor="' + weekendColor + '"');
+ }
+
+ return "";
+}
+
+Calendar.prototype.format_data = function(p_day) {
+ var vData;
+ var vMonth = 1 + this.gMonth;
+ vMonth = (vMonth.toString().length < 2) ? "0" + vMonth : vMonth;
+ var vMon = Calendar.get_month(this.gMonth).substr(0,3).toUpperCase();
+ var vFMon = Calendar.get_month(this.gMonth).toUpperCase();
+ var vY4 = new String(this.gYear);
+ var vY2 = new String(this.gYear.substr(2,2));
+ var vDD = (p_day.toString().length < 2) ? "0" + p_day : p_day;
+
+ switch (this.gFormat) {
+ case "MM\/DD\/YYYY" :
+ vData = vMonth + "\/" + vDD + "\/" + vY4;
+ break;
+ case "MM\/DD\/YY" :
+ vData = vMonth + "\/" + vDD + "\/" + vY2;
+ break;
+ case "MM-DD-YYYY" :
+ vData = vMonth + "-" + vDD + "-" + vY4;
+ break;
+ case "YYYY-MM-DD" :
+ vData = vY4 + "-" + vMonth + "-" + vDD;
+ break;
+ case "MM-DD-YY" :
+ vData = vMonth + "-" + vDD + "-" + vY2;
+ break;
+ case "DD\/MON\/YYYY" :
+ vData = vDD + "\/" + vMon + "\/" + vY4;
+ break;
+ case "DD\/MON\/YY" :
+ vData = vDD + "\/" + vMon + "\/" + vY2;
+ break;
+ case "DD-MON-YYYY" :
+ vData = vDD + "-" + vMon + "-" + vY4;
+ break;
+ case "DD-MON-YY" :
+ vData = vDD + "-" + vMon + "-" + vY2;
+ break;
+ case "DD\/MONTH\/YYYY" :
+ vData = vDD + "\/" + vFMon + "\/" + vY4;
+ break;
+ case "DD\/MONTH\/YY" :
+ vData = vDD + "\/" + vFMon + "\/" + vY2;
+ break;
+ case "DD-MONTH-YYYY" :
+ vData = vDD + "-" + vFMon + "-" + vY4;
+ break;
+ case "DD-MONTH-YY" :
+ vData = vDD + "-" + vFMon + "-" + vY2;
+ break;
+ case "DD\/MM\/YYYY" :
+ vData = vDD + "\/" + vMonth + "\/" + vY4;
+ break;
+ case "DD\/MM\/YY" :
+ vData = vDD + "\/" + vMonth + "\/" + vY2;
+ break;
+ case "DD-MM-YYYY" :
+ vData = vDD + "-" + vMonth + "-" + vY4;
+ break;
+ case "DD-MM-YY" :
+ vData = vDD + "-" + vMonth + "-" + vY2;
+ break;
+ case "DD.MM.YYYY" :
+ vData = vDD + "." + vMonth + "." + vY4;
+ break;
+ case "DD.MM.YY" :
+ vData = vDD + "." + vMonth + "." + vY2;
+ break;
+ default :
+ vData = vMonth + "\/" + vDD + "\/" + vY4;
+ }
+
+ return vData;
+}
+
+function Build(p_item, p_month, p_year, p_format) {
+ var gCal = new Calendar(p_item, p_month, p_year, p_format);
+
+ // Customize your Calendar here..
+ gCal.gBGColor="white";
+ gCal.gLinkColor="black";
+ gCal.gTextColor="black";
+ gCal.gHeaderColor="darkgreen";
+
+ // initialize the content string
+ ggWinContent = "";
+
+ // Check for DRAGGABLE support
+ if (typeof ol_draggable == 'undefined') DRAGGABLE = DONOTHING;
+
+ // Choose appropriate show function
+ if (gCal.gYearly) {
+ // Note: you can set ggPosX and ggPosY as part of the onclick javascript
+ // code before you call the show_yearly_calendar function:
+ // onclick="ggPosX=20;ggPosY=5;show_yearly_calendar(...);"
+ if (OLns6) {
+ if (ggPosX == -1) ggPosX = 20;
+ if (ggPosY == -1) ggPosY = 10;
+ }
+ if (fontsize == 8) fontsize = 6;
+ // generate the calendar
+ gCal.showY();
+ } else {
+ if (fontsize == 6) fontsize = 8;
+ gCal.show();
+ }
+
+ // Clear any previous EXCLUSIVE setting
+ o3_exclusive=0;
+ // If X and Y positions are not specified use MIDX and RELY
+ if (ggPosX == -1 && ggPosY == -1) {
+ overlib(ggWinContent, AUTOSTATUSCAP, STICKY, EXCLUSIVE, DRAGGABLE,
+ CLOSECLICK, TEXTSIZE,'8pt', CAPTIONSIZE,'8pt', CLOSESIZE,'8pt',
+ CAPTION,calmsg[ggLang][5], CLOSETITLE,calmsg[ggLang][8],CLOSETEXT,
+ '<span style="background:#e0e0e0;color:#000000;text-decoration:none;'
+ +'font-weight:bold;"> X </span>', MIDX,0, RELY,10);
+ // Otherwise use FIXX and FIXY
+ } else {
+ // Make sure popup is on screen
+ var X = ((ggPosX < 10)?0:ggPosX - 10), Y = ((ggPosY < 10)?0:ggPosY - 10);
+ window.scroll(X, Y);
+ // Put up the calendar
+ overlib(ggWinContent, AUTOSTATUSCAP, STICKY, EXCLUSIVE, DRAGGABLE,
+ CLOSECLICK, TEXTSIZE,'8pt', CAPTIONSIZE,'8pt', CLOSESIZE,'8pt',
+ CAPTION,calmsg[ggLang][5], CLOSETITLE,calmsg[ggLang][8],CLOSETEXT,
+ '<span style="background:#e0e0e0;color:#000000;text-decoration:none;'
+ +'font-weight:bold;"> X </span>', FIXX,ggPosX, FIXY,ggPosY);
+ // Reset the position variables
+ ggPosX = -1; ggPosY = -1;
+ }
+}
+
+function show_calendar() {
+ var p_item // Return Item.
+ var p_month // 0-11 for Jan-Dec; 12 for All Months.
+ var p_year // 4-digit year
+ var p_format // Date format (YYYY-MM-DD, DD/MM/YYYY, ...)
+ fontsize = 8;
+
+ Calendar.Months = CalendarMonths[ggLang];
+ Calendar.Weekdays = CalendarWeekdays[ggLang];
+
+ p_item = arguments[0];
+ if (arguments[1] == "" || arguments[1] == null || arguments[1] == '12')
+ p_month = new String(gNow.getMonth());
+ else
+ p_month = arguments[1];
+ if (arguments[2] == "" || arguments[2] == null)
+ p_year = new String(gNow.getFullYear().toString());
+ else
+ p_year = arguments[2];
+ if (arguments[3] == "" || arguments[3] == null)
+ p_format = datFormat[ggLang];
+ else
+ p_format = arguments[3];
+
+ if (OLns4) return overlib(calmsg[ggLang][6]+p_format,
+ FGCOLOR,'#ffffcc', TEXTSIZE,2, STICKY, NOCLOSE, OFFSETX,-10, OFFSETY,-10,
+ WIDTH,110, BASE,2);
+
+ Build(p_item, p_month, p_year, p_format);
+}
+
+function show_yearly_calendar() {
+ var p_item // Return Item.
+ var p_year // 4-digit year
+ var p_format // Date format (YYYY-MM-DD, DD/MM/YYYY, ...)
+
+ Calendar.Months = CalendarMonths[ggLang];
+ Calendar.Weekdays = CalendarWeekdays[ggLang];
+
+ p_item = arguments[0];
+ if (arguments[1] == "" || arguments[1] == null)
+ p_year = new String(gNow.getFullYear().toString());
+ else
+ p_year = arguments[1];
+ if (arguments[2] == "" || arguments[2] == null)
+ p_format = datFormat[ggLang];
+ else
+ p_format = arguments[2];
+
+ if (OLns4) return overlib(calmsg[ggLang][6]+p_format,
+ FGCOLOR,'#ffffcc', TEXTSIZE,2, STICKY, NOCLOSE, OFFSETX,-10, OFFSETY,-10,
+ WIDTH,110, BASE,2);
+
+ Build(p_item, null, p_year, p_format);
+}
diff --git a/src/extras/sos-html-logs/share/html/overlib/cornerBL.gif b/src/extras/sos-html-logs/share/html/overlib/cornerBL.gif Binary files differnew file mode 100644 index 00000000..e5af971f --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/cornerBL.gif diff --git a/src/extras/sos-html-logs/share/html/overlib/cornerBR.gif b/src/extras/sos-html-logs/share/html/overlib/cornerBR.gif Binary files differnew file mode 100644 index 00000000..7f970708 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/cornerBR.gif diff --git a/src/extras/sos-html-logs/share/html/overlib/cornerTL.gif b/src/extras/sos-html-logs/share/html/overlib/cornerTL.gif Binary files differnew file mode 100644 index 00000000..242b06f7 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/cornerTL.gif diff --git a/src/extras/sos-html-logs/share/html/overlib/cornerTR.gif b/src/extras/sos-html-logs/share/html/overlib/cornerTR.gif Binary files differnew file mode 100644 index 00000000..9d7cc784 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/cornerTR.gif diff --git a/src/extras/sos-html-logs/share/html/overlib/edgeB.gif b/src/extras/sos-html-logs/share/html/overlib/edgeB.gif Binary files differnew file mode 100644 index 00000000..cef34c0f --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/edgeB.gif diff --git a/src/extras/sos-html-logs/share/html/overlib/edgeL.gif b/src/extras/sos-html-logs/share/html/overlib/edgeL.gif Binary files differnew file mode 100644 index 00000000..592c1b1f --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/edgeL.gif diff --git a/src/extras/sos-html-logs/share/html/overlib/edgeR.gif b/src/extras/sos-html-logs/share/html/overlib/edgeR.gif Binary files differnew file mode 100644 index 00000000..d3d66351 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/edgeR.gif diff --git a/src/extras/sos-html-logs/share/html/overlib/edgeT.gif b/src/extras/sos-html-logs/share/html/overlib/edgeT.gif Binary files differnew file mode 100644 index 00000000..416a31d0 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/edgeT.gif diff --git a/src/extras/sos-html-logs/share/html/overlib/exit.gif b/src/extras/sos-html-logs/share/html/overlib/exit.gif Binary files differnew file mode 100644 index 00000000..9f9bc80e --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/exit.gif diff --git a/src/extras/sos-html-logs/share/html/overlib/flower.gif b/src/extras/sos-html-logs/share/html/overlib/flower.gif Binary files differnew file mode 100644 index 00000000..101275eb --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/flower.gif diff --git a/src/extras/sos-html-logs/share/html/overlib/iframecontentmws.js b/src/extras/sos-html-logs/share/html/overlib/iframecontentmws.js new file mode 100644 index 00000000..ffcebf38 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/iframecontentmws.js @@ -0,0 +1,53 @@ +/*
+ iframecontentmws.js - Foteos Macrides (author and copyright holder)
+ Initial: October 10, 2004 - Last Revised: November 11, 2006
+ Scripts for using HTML documents as iframe content in overlibmws popups.
+
+ See http://www.macridesweb.com/oltest/IFRAME.html
+ and http://www.macridesweb.com/oltest/AJAX.html#ajaxex3
+ for more information.
+*/
+
+/*
+ Use as lead argument in overlib or overlb2 calls. Include WRAP and
+ TEXTPADDING,0 in the call to ensure that the width arg is respected (unless
+ the CAPTION plus CLOSETEXT widths add up to more than the width arg, in which
+ case you should increase the width arg). The name arg should be a unique
+ string for each popup with iframe content in the document. The frameborder
+ arg should be 1 (browser default if omitted) or 0. The scrolling arg should
+ be 'auto' (default if omitted), 'yes' or 'no'.
+*/
+function OLiframeContent(src, width, height, name, frameborder, scrolling) {
+ return ('<iframe src="'+src+'" width="'+width+'" height="'+height+'"'
+ +(name!=null?' name="'+name+'" id="'+name+'"':'')
+ +(frameborder!=null?' frameborder="'+frameborder+'"':'')
+ +' scrolling="'+(scrolling!=null?scrolling:'auto')
+ +'"><div>[iframe not supported]</div></iframe>');
+}
+
+/*
+ Swap the src if we are iframe content. The name arg should be the same
+ string as in the OLiframeContent function for the popup. The src arg is
+ a partial, relative, or complete URL for the document to be swapped in.
+*/
+function OLswapIframeSrc(name, src){
+ if(parent==self){
+ alert(src+'\n\n is only for iframe content');
+ return;
+ }
+ var o=parent.OLgetRef(name);
+ if(o)o.src=src;
+ else alert(src+'\n\n is not available');
+}
+
+/*
+ Emulate the Back button if we are iframe content. Use only in documents
+ which are swapped in by using the OLswapIframeSrc function.
+*/
+function OLiframeBack(){
+ if(parent==self){
+ alert('This feature is only for iframe content');
+ return;
+ }
+ history.back();
+}
diff --git a/src/extras/sos-html-logs/share/html/overlib/license.html b/src/extras/sos-html-logs/share/html/overlib/license.html new file mode 100644 index 00000000..1cf6457a --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/license.html @@ -0,0 +1,265 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1">
+<meta name="keywords" content="overlib, overlibmws, DHTML popups, DHTML tooltips, DHTML, popup, tooltip, Macrides Web Services, Macrides">
+<meta name="description" content="Open source license for the overlibmws DHTML popup and tooltip software package.">
+<meta name="author" content="Foteos Macrides">
+<title>overLIB - License for the overlibmws package</title>
+
+<script type="text/javascript">
+<!--
+var OLbubbleImageDir='http://www.macridesweb.com/oltest/';
+var OLbubbleImages='flower';
+//-->
+</script>
+
+<script type="text/javascript"
+ src="http://www.macridesweb.com/oltest/overlibmws.js"></script>
+<script type="text/javascript"
+ src="http://www.macridesweb.com/oltest/overlibmws_filter.js"></script>
+<script type="text/javascript"
+ src="http://www.macridesweb.com/oltest/overlibmws_bubble.js"></script>
+<script type="text/javascript"
+ src="http://www.macridesweb.com/oltest/overlibmws_shadow.js"></script>
+
+<script type="text/javascript">
+<!--
+OLpageDefaults(TEXTPADDING,6,CAPTIONPADDING,6,WRAP,
+ FILTER,FILTERSHADOW,1,FILTERSHADOWCOLOR,'#cf33cf',
+ SHADOW,SHADOWCOLOR,'#cf33cf',SHADOWOPACITY,100);
+
+// Preload backgound images.
+rainbowline=new Image();
+rainbowline.src="http://www.macridesweb.com/image/rainbowline.gif"
+rb=new Image();
+rb.src="http://www.macridesweb.com/image/rb.jpg"
+// -->
+</script>
+
+<style type="text/css">
+<!--
+.oltxt14 {font-family:Verdana;font-size:14px;font-weight:bold;color:#330033;}
+a {color:#338855;font-weight:bold;}
+a:hover {color:#FF00FF}
+.txtb12 {font-family:Verdana,Arial,sans-serif;font-size:12px;font-weight:bold;}
+.text14 {font-family:Verdana,Arial,sans-serif;font-size:14px;}
+.text20 {font-family:Verdana,Arial,sans-serif;font-size:20px;font-weight:bold;}
+.text22 {font-family:Verdana,Arial,sans-serif;font-size:22px;font-weight:bold;}
+.myText {font-family:Verdana,Arial,Helvetica,sans-serif;font-size:13px;color:#000000;}
+.snip {font-family:Verdana,Arial,Helvetica;font-size:10px;}
+.purple14 {font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px;color:purple;
+ font-weight:bold;}
+.purple22 {font-family:Verdana,Arial,Helvetica,sans-serif;font-size:22px;color:purple;
+ font-weight:bold;font-style:italic;}
+.comic20 {font-family:'Comic Sans MS';font-size:20px;}
+-->
+</style>
+</head>
+
+<body text="#000000" bgcolor="#ddeeff">
+
+<table width="90%" cellpadding="0" cellspacing="0" align="center">
+ <tr>
+ <td align="center" class="text22">
+ Open Source License for the <span class="purple22">overlibmws</span> Package
+ </td>
+ </tr>
+ <tr>
+ <td class="text14">
+ <br>
+ <span class="text20">1. License coverage</span>
+ <br><br>
+ Note that this license only covers the script library (javascript core and plugin modules)
+ and not any supporting material such as the <span class="purple14">overlibmws</span> <a
+ href="http://www.macridesweb.com/oltest/"
+ onmouseover="return overlib('Link to the Download and Test Directory for '
+ +'<span class=\'purple14\'><i>overlibmws</i></span>',
+ TEXTFONTCLASS,'myText', VAUTO, OFFSETY,20, CENTER, FGCOLOR,'#cceeff');"
+ onmouseout="nd();">website</a> or its online documentation and support files. You may not
+ reproduce the website or its online material without explicit written permission from the
+ author, but can freely incorporate scripts and procedures which are demonstrated in that
+ material into your own HTML or XML documents.
+ <br><br>
+ <span class="text20">2. License (Artistic)</span>
+ <ul>
+ <li>
+ <b>Preamble</b><br>
+ The intent of this document is to state the conditions under which a Package may be
+ copied, such that the Copyright Holder maintains some semblance of artistic control over
+ the development of the package, while giving the users of the package the right to use
+ and distribute the Package in a more-or-less customary fashion, plus the right to make
+ reasonable modifications.
+ </li>
+ </ul>
+ <ul>
+ <li>
+ <b>Definitions:</b><br>
+ "Package" refers to the collection of files distributed by the Copyright Holder, and
+ derivatives of that collection of files created through textual modification.
+ <br><br>
+ "Standard Version" refers to such a Package if it has not been modified, or has been
+ modified in accordance with the wishes of the Copyright Holder.
+ <br><br>
+ "Copyright Holder" is whoever is named in the copyright or copyrights for the package.
+ <br><br>
+ "You" is you, if you're thinking about copying or distributing this Package.
+ <br><br>
+ "Reasonable copying fee" is whatever you can justify on the basis of media cost,
+ duplication charges, time of people involved, and so on. (You will not be required to
+ justify it to the Copyright Holder, but only to the computing community at large as a
+ market that must bear the fee.)
+ <br><br>
+ "Freely Available" means that no fee is charged for the item itself, though there may be
+ fees involved in handling the item. It also means that recipients of the item may
+ redistribute it under the same conditions they received it.
+ </li>
+ </ul>
+ <ol>
+ <li>
+ You may make and give away verbatim copies of the source form of the Standard Version
+ of this Package without restriction, provided that you duplicate all of the original
+ copyright notices and associated disclaimers.
+ </li>
+ <li>
+ You may apply bug fixes, portability fixes and other modifications derived from the
+ Public Domain or from the Copyright Holder. A Package modified in such a way shall still
+ be considered the Standard Version.
+ </li>
+ <li>
+ You may otherwise modify your copy of this Package in any way, provided that you insert
+ a prominent notice in each changed file stating how and when you changed that file, and
+ provided that you do at least ONE of the following:
+ <ol>
+ <li>
+ place your modifications in the Public Domain or otherwise make them Freely Available,
+ such as by posting said modifications to Usenet or an equivalent medium, or placing the
+ modifications on a major archive site such as ftp.uu.net, or by allowing the Copyright
+ Holder to include your modifications in the Standard Version of the Package.
+ </li>
+ <li>
+ use the modified Package only within your corporation or organization.
+ </li>
+ <li>
+ rename any non-standard executables so the names do not conflict with standard
+ executables, which must also be provided, and provide a separate manual page for each
+ non-standard executable that clearly documents how it differs from the Standard Version.
+ </li>
+ <li>
+ make other distribution arrangements with the Copyright Holder.
+ </li>
+ </ol>
+ </li>
+ <li>
+ You may distribute the programs of this Package in object code or executable form,
+ provided that you do at least ONE of the following:
+ <ol>
+ <li>
+ distribute a Standard Version of the executables and library files, together with
+ instructions (in the manual page or equivalent) on where to get the Standard Version.
+ </li>
+ <li>
+ accompany the distribution with the machine-readable source of the Package with your
+ modifications.
+ </li>
+ <li>
+ accompany any non-standard executables with their corresponding Standard Version
+ executables, giving the non-standard executables non-standard names, and clearly
+ documenting the differences in manual pages (or equivalent), together with instructions
+ on where to get the Standard Version.
+ </li>
+ <li>
+ make other distribution arrangements with the Copyright Holder.
+ </li>
+ </ol>
+ </li>
+ <li>
+ You may charge a reasonable copying fee for any distribution of this Package. You may
+ charge any fee you choose for support of this Package. You may not charge a fee for this
+ Package itself. However, you may distribute this Package in aggregate with other (possibly
+ commercial) programs as part of a larger (possibly commercial) software distribution
+ provided that you do not advertise this Package as a product of your own.
+ </li>
+ <li>
+ The scripts and library files supplied as input to or produced as output from the programs
+ of this Package do not automatically fall under the copyright of this Package, but belong
+ to whomever generated them, and may be sold commercially, and may be aggregated with this
+ Package.
+ </li>
+ <li>
+ C or perl subroutines supplied by you and linked into this Package shall not be considered
+ part of this Package.
+ </li>
+ <li>
+ The name of the Copyright Holder may not be used to endorse or promote products derived
+ from this software without specific prior written permission.
+ </li>
+ <li>
+ THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE.
+ </li>
+ </ol>
+ <br>
+ </td>
+ </tr>
+</table>
+
+<table align="center" cellpadding="0" cellspacing="0" border="0" bgcolor="#ccddff">
+ <tr>
+ <td width="90" align="right" valign="middle" class="myText">
+ <a
+ href="http://www.macridesweb.com/oltest/"
+ onmousemove="if(OLie55)self.status=this.href;"
+ onmouseover="return overlib(
+ 'Popups by <span class=\'purple14\'><i>overlibmws</i></span>',
+ REF,'logo',REFX,96,REFY,-4,BORDER,3,BASE,3,TEXTPADDING,4,TEXTFONTCLASS,'oltxt14',
+ FGBACKGROUND,'http://www.macridesweb.com/image/rb.jpg',
+ BGBACKGROUND,'http://www.macridesweb.com/image/rainbowline.gif');"
+ onmouseout="nd();"><img
+ name='logo' id="logo"
+ width="88" height="31" hspace="10" vspace="10" align="right" border="0" alt=""
+ src="http://www.macridesweb.com/image/overlibmwslogo.gif"></a><br>
+ </td>
+ <td valign="middle" class="snip">
+ Copyright Foteos Macrides<br>
+ 2002-2007.<br>
+ All rights reserved.<br>
+ </td>
+ <td width="72" align="right" valign="middle" class="myText">
+ <a
+ target="_blank"
+ href="https://www.paypal.com/xclick/business=overlibmws%40macridesweb.com&item_name=Donation+for+overlibmws&no_note=1&tax=0&currency_code=USD"
+ onmousemove="if(OLie55)self.status=this.href;"
+ onmouseover="return overlib(
+ 'The <span class=\'purple14\'><i>overlibmws</i></span> library '
+ +'and its support materials at this site are <br>free to download and use, but '
+ +'voluntary donations via PayPal are<br>appreciated (donations via PayPal are fast, '
+ +'simple, and secure).',TEXTPADDING,8,FGCOLOR,'#bbddff',
+ FGBACKGROUND,'http://www.macridesweb.com/image/rb.jpg',
+ REF,'logo',REFC,'UL',REFP,'LL',REFX,-10,REFY,-10,TEXTFONTCLASS,'txtb12',BORDER,6,BASE,6,
+ BGBACKGROUND,'http://www.macridesweb.com/image/rainbowline.gif');"
+ onmouseout="nd();"><img
+ src="http://www.macridesweb.com/image/PayPalDonate.gif"
+ width="62" height="31" border="0"
+ alt=""></a><br>
+ </td>
+ <td width="110" align="right" valign="middle" class="myText">
+ <a
+ onmousemove="if(OLie55)self.status=this.href;"
+ onmouseover="return overlib(' Valid HTML 4.01',BUBBLE,
+ TEXTFONTCLASS,'comic20',REF,'w3c',REFC,'UR',REFP,'LR',REFX,73,REFY,2,
+ FILTERSHADOW,1,FILTERSHADOWCOLOR,'#00B000');"
+ onmouseout="nd();"
+ href="http://validator.w3.org/check?uri=http%3A%2F%2Fwww.macridesweb.com%2Foltest%2Flicense.html"><img
+ name="w3c" id="w3c"
+ border="0" height="31" width="88" alt="" hspace="6"
+ src="http://www.macridesweb.com/image/valid-html401.gif"></a><br>
+ </td>
+ </tr>
+</table>
+<br>
+
+</body>
+</html>
diff --git a/src/extras/sos-html-logs/share/html/overlib/loading.gif b/src/extras/sos-html-logs/share/html/overlib/loading.gif Binary files differnew file mode 100644 index 00000000..5c8f1ef5 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/loading.gif diff --git a/src/extras/sos-html-logs/share/html/overlib/objectcontentmws.js b/src/extras/sos-html-logs/share/html/overlib/objectcontentmws.js new file mode 100644 index 00000000..94d1e4f3 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/objectcontentmws.js @@ -0,0 +1,16 @@ +/*
+ objectcontentmws.js - Foteos Macrides
+ Initial: October 10, 2004 - Last Revised: November 22, 2004
+ Simple script for using an HTML file as object content in overlibmws popups.
+ Include WRAP and TEXTPADDING,0 in the overlib call to ensure that the width
+ argument is respected (unless the CAPTION plus CLOSETEXT widths add up to more
+ than the width argument, in which case you should increase the width argument).
+
+ See http://www.macridesweb.com/oltest/overflow.html for demonstrations.
+*/
+
+function OLobjectContent(data, width, height, name) {
+ return ('<object data="'+data+'" width="'+width+'" height="'+height+'"'
+ +(name?' name="'+name+'" id="'+name+'"':'')+' type="text/html">'
+ +'<div>[object not supported]</div></object>');
+}
diff --git a/src/extras/sos-html-logs/share/html/overlib/oval.gif b/src/extras/sos-html-logs/share/html/overlib/oval.gif Binary files differnew file mode 100644 index 00000000..7e1af22f --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/oval.gif diff --git a/src/extras/sos-html-logs/share/html/overlib/overlibCompat.js b/src/extras/sos-html-logs/share/html/overlib/overlibCompat.js new file mode 100644 index 00000000..f8fb88d4 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/overlibCompat.js @@ -0,0 +1,30 @@ +////////////////////////////////////////////////////////////////////////////////////
+// OVERLIB 2 COMPATABILITY FUNCTIONS
+// Include this if you are upgrading from overlib v2.x. Otherwise, forget it.
+////////////////////////////////////////////////////////////////////////////////////
+// Converts old 0=left, 1=right and 2=center into constants.
+function vpos_convert(d){if(d==0){d=LEFT;}else{if(d==1){d=RIGHT;}else{d=CENTER;}}return d;}
+// Simple popup
+function dts(d,text){o3_hpos=vpos_convert(d);overlib(text,o3_hpos,CAPTION,"");}
+// Caption popup
+function dtc(d,text,title){o3_hpos=vpos_convert(d);overlib(text,CAPTION,title,o3_hpos);}
+// Sticky
+function stc(d,text,title){o3_hpos=vpos_convert(d);overlib(text,CAPTION,title,o3_hpos,STICKY);}
+// Simple popup right
+function drs(text){dts(1,text);}
+// Caption popup right
+function drc(text,title){dtc(1,text,title);}
+// Sticky caption right
+function src(text,title){stc(1,text,title);}
+// Simple popup left
+function dls(text){dts(0,text);}
+// Caption popup left
+function dlc(text,title){dtc(0,text,title);}
+// Sticky caption left
+function slc(text,title){stc(0,text,title);}
+// Simple popup center
+function dcs(text){dts(2,text);}
+// Caption popup center
+function dcc(text,title){dtc(2,text,title);}
+// Sticky caption center
+function scc(text,title){stc(2,text,title);}
diff --git a/src/extras/sos-html-logs/share/html/overlib/overlibConfig.txt b/src/extras/sos-html-logs/share/html/overlib/overlibConfig.txt new file mode 100644 index 00000000..d1059303 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/overlibConfig.txt @@ -0,0 +1,641 @@ + +Below are described the configuration variables and arrays associated with the +overlib commands, and their defaults as set in the + overlibmws.js +core module and the + overlibmws_bubble.js, overlibmws_crossframe.js, overlibmws_debug.js, + overlibmws_draggable.js, overlibmws_exclusive.js, overlib_filter.js, + overlibmws_function.js, overlibmws_hide.js, overlibmws_modal.js, + overlibmws_overtwo.js, overlibmws_print.js, overlibmws_scroll.js and + overlibmws_shadow.js +plugin modules. The + overlibmws_iframe.js and overlib_regCore.js +plugin modules do not have configuration variables or arrays. + +You can change any of the configuration default values for all pages by making +the modifications in overlibmws.js or the plugin modules, or for individual HTML +pages by declaring any of these variables with the values you prefer in a SCRIPT +block or imported js file for those pages. + +You instead can change the configuration default values for individual HTML pages by +calling the OLpageDefaults(arguments) function in a SCRIPT block or imported js file +with "arguments" consisting of a comma-separated list of uppercase command names and +their parameters if any, homologously to the arguments for an overlib() call. + +The overlibmws_overtwo.js module is used by calling overlib2() and nd2() from within +an overlib() call that invokes a primary popup, to invoke and close secondary popups. +Its LABLE2 command and its configuration variable are specific to the secondary popups, +and are complementary to the core module's LABLEL command and its configuration variable +for primary popups. + +The overlibmws_iframe.js module has no additional commands, and thus no configuration +variables. It should be imported when a page has system controls (e.g., some form +elements, flash objects, applets) which obscure overlib popups. It corrects this +problem for IE v5.5 or higher. For versions of IE lower than v5.5 and for other browsers, +you can use commands in the overlibmws_hide.js plugin module. See the examples in +http://www.macridesweb.com/oltest/hide.html and http://www.macridesweb.com/oltest/flash.html +on how to use those command to hide the system controls when overlib popups are invoked. + +The overlibmws_regCore.js module has no overlib() or overlib2() commands, and thus +no configuration variables. It should be imported in frames which will not themselves +import the core module and any plugin modules, but instead will use those in another +frame. See its header for more information. Examples of its use are in +http://www.macridesweb.com/oltest/testFrame.html + +See the overlibmws Command Reference (http://www.macridesweb.com/oltest/commandRef.html) +for more information about the commands, configuration variables, and plugin modules. + + +//////////////////////////////////////////////////////////////////////////////////// +// DEFAULT CONFIGURATION FOR CORE MODULE overlibmws.js +//////////////////////////////////////////////////////////////////////////////////// + +// FGCOLOR - Main background color (the large area). +// Usually a bright color (white, yellow etc). +var ol_fgcolor = "#CCCCFF"; + +// BGCOLOR - Border color. +// Usually a dark color (black, brown etc). +var ol_bgcolor = "#333399"; + +// CGCOLOR - Caption background color (typically same as border color). +// Usually a dark color (black, brown etc). +var ol_cgcolor = "#333399"; + +// TEXTCOLOR - Text color. +// Usually a dark color. +var ol_textcolor = "#000000"; + +// CAPCOLOR - Color of the caption text. +// Usually a bright color +var ol_capcolor = "#FFFFFF"; + +// CLOSECOLOR - Color of "Close" when using Sticky. +// Usually a semi-bright color. +var ol_closecolor = "#9999FF"; + +// TEXTFONT - Font face for the main text. +var ol_textfont = "Verdana,Arial,Helvetica"; + +// CAPTIONFONT - Font face for the caption. +var ol_captionfont = "Verdana,Arial,Helvetica"; + +// CLOSEFONT - Font face for the close text. +var ol_closefont = "Verdana,Arial,Helvetica"; + +// TEXTSIZE - Font size for the main text. +var ol_textsize = "1"; + +// CAPTIONSIZE - Font size for the caption. +var ol_captionsize = "1"; + +// CLOSESIZE - Font size for the close text. +var ol_closesize = "1"; + +// FGCLASS - Main background class. +var ol_fgclass = ""; + +// BGCLASS - Frame background class. +var ol_bgclass = ""; + +// CGCLASS - Caption background class. +var ol_cgclass = ""; + +// TEXTPADDING - Padding for main text. +var ol_textpadding = "2"; + +// TEXTFONTCLASS - Main font class. +var ol_textfontclass = ""; + +// CAPTIONPADDING - Padding for caption (including Close text if present). +var ol_captionpadding = "2"; + +// CAPTIONFONTCLASS - Caption font class. +var ol_captionfontclass = ""; + +// CLOSEFONTCLASS - Close font class. +var ol_closefontclass = ""; + +// CLOSECLICK - If the user has to click to close stickies. +var ol_closeclick = 0; + +// CLOSETEXT - Text for the closing sticky popups. Normal is "Close". +var ol_close = "Close"; + +// CLOSETITLE - Text to use as value of TITLE attribute for browser-generated TooTips +// with the "Close" link in captions of stickies when CLOSECLICK is changed to 1; +var ol_closetitle = "Click to Close"; + +// Default text for popups +// Should you forget to pass something to overLIB this will be displayed. +var ol_text = "Default Text"; + +// Default caption +// You should leave this blank or you will have problems making non caps popups. +var ol_cap = ""; + +// CAPBELOW - Whether the caption should appear below the main text area. Default is +// off (0) such that the caption appears above. +var ol_capbelow=0; + +// BACKGROUND - Default background image. Better left empty unless you always want one. +var ol_background = ""; + +// WIDTH - Default width of the popups in pixels. 100-300 pixels is typical. +// This value is simply a suggestion to the browser, which may change the +// actual width depending on the content. +var ol_width = "200"; + +// WRAP - Intended to keep the popup no wider than its content plus normal padding, but +// to wrap the content if it would exceed the window width, or if it would exceed WRAPMAX +// when that has been set to a value greater than zero. +// Overrides the o3_width setting. Default is no wrap (0). +var ol_wrap = 0; + +// WRAPMAX - If set to a value greater than 0, sets the maximum width of the popup, up to +// the window width, before wrapping occurs when the WRAP command is set. +var ol_wrapmax = 0; + +// HEIGHT - Default height for popup. Often best left alone. +var ol_height = -1; + +// BORDER - How thick the ol_border should be in pixels. +// 1-3 pixels is typical. +var ol_border = "1"; + +// BASE - Any additional thickening of the border's base in pixels. +var ol_base = "0"; + +// OFFSETX - How many pixels to the right (positive values) or left (negative values) +// of the cursor to show the popup. Values between 3 and 12 are best. +var ol_offsetx = 10; + +// OFFSETY - How many pixels below (positive values) or above (negative values) the +// cursor to show the popup. Values between 3 and 20 are best. +var ol_offsety = 10; + +// STICKY - Decides if sticky popups are default. 0 for non, 1 for stickies. +var ol_sticky = 0; + +// NOFOLLOW - Should non-sticky popups not follow cursor movements (i.e., remain +// stationary where initially positioned on invocation, like title-based tooltips). +var ol_nofollow = 0; + +// NOCLOSE - Omit Close text in stickies with captions, for all stickies use mouse off +// after mouse over sticky to close, and cancel any timeout while over sticky. +var ol_noclose = 0; + +// MOUSEOFF - For stickies which do have a caption with a CLOSETEXT, also use mouse off +// after mouse over sticky to close, and cancel any timeout while over sticky. +var ol_mouseoff = 0; + +// OFFDELAY - Default delay for closing NOCLOSE or MOUSEOFF popups. If a mouse over the +// sticky occurs during this delay, the close is cancelled. +var ol_delay = 300; + +// RIGHT - Default vertical alignment for popups. +// It's best to leave RIGHT here. Other options are LEFT and CENTER. +var ol_hpos = RIGHT; + +// BELOW - Default vertical position of the popups. +// It's best to leave BELOW here. Other options are ABOVE and VCENTER. +var ol_vpos = BELOW; + +// Default status bar text when a popup is invoked. +var ol_status = ""; + +// AUTOSTATUS, AUTOSTATUSCAP - If the status bar automatically should load either +// text or caption. 0=nothing, 1=text, 2=caption +var ol_autostatus = 0; + +// SNAPX - Horizontal grid spacing that popups will snap to. +// 0 makes no grid, anything else will cause a snap to that grid spacing. +var ol_snapx = 0; + +// SNAPY - Vertical grid spacing that popups will snap to. +// 0 makes no grid, anything else will cause a snap to that grid spacing. +var ol_snapy = 0; + +// FIXX - Sets the popup horizontal position to a fixed column. +// Numbers greater than -1 will cause fixed position. +var ol_fixx = -1; + +// FIXY - Sets the popup vertical position to a fixed row. +// Numbers greater than -1 will cause fixed position. +var ol_fixy = -1; + +// RELX - Sets the popup horizontal position to a column relative to the window display. +// Anything numeric (non-null) will cause relative position. Positive and 0 is to +// the right from left window margin for left margin of popup. Negative is to the +// left from right window margin for right margin of popup. +var ol_relx = null; + +// RELY - Sets the popup vertical position to a row relative to the window display. +// Anything numeric (non-null) will cause relative position. Positive and 0 is down +// from top window margin for top margin of popup. Negaive is up from bottom window +// margin for bottom margin of popup. +var ol_rely = null; + +// MIDX - Sets the popup horizontal midpoint to a column relative to the window horizontal +// midpoint. Anything numeric (non-null) will cause midpoint position. Positive and +// 0 is to the right from the window midpoint. Negative is to the left. +var ol_midx = null; + +// MIDY - Sets the popup vertical midpoint to a row relative to the window vertical midpoint. +// Anything numeric (non-null) will cause midpoint position. Positive and 0 is down from +// the window midpoint. Negative is up. +var ol_midy = null; + +// REF - The NAME of an anchor or image, or ID of a layer, to serve as a reference object such +// that a corner of the popup will be positioned relative to a corner of the object. +var ol_ref = ""; + +// REFC - Corner of the reference object for positioning. +// Value can be: 'UL' (Upper Left), 'UR', 'LR', or 'LL'. +var ol_refc = 'UL'; + +// REFP - Corner of the popup for positioning. +// Value can be: 'UL' (Upper Left), 'UR', 'LR', or 'LL'. +var ol_refp = 'UL'; + +// REFX - X displacement from the reference point. Positive to the right, +// negative left. +var ol_refx = 0; + +// REFY - Y displacement from the reference point. Positive down, negative up. +var ol_refy = 0; + +// FGBACKGROUND - Background image for the popup's inside. +var ol_fgbackground = ""; + +// BGBACKGROUND - Background image for the popup's frame (border). +var ol_bgbackground = ""; + +// CGBACKGROUND - Background image for the caption. +var ol_cgbackground = ""; + +// PADX +// How much horizontal left padding text should get by default when BACKGROUND is used. +var ol_padxl = 1; +// How much horizontal right padding text should get by default when BACKGROUND is used. +var ol_padxr = 1; + +// PADY +// How much vertical top padding text should get by default when BACKGROUND is used. +var ol_padyt = 1; +// How much vertical bottom padding text should get by default when BACKGROUND is used. +var ol_padyb = 1; + +// FULLHTML - If the user by default must supply all html for complete control of popup content. +// Set to 1 to activate, 0 otherwise. +var ol_fullhtml = 0; + +// CAPICON - Default icon to place next to the popups caption. +var ol_capicon = ""; + +// FRAME - Default frame. We default to current frame if there is no frame defined. +var ol_frame = self; + +// TIMEOUT - Default timeout. By default there is no timeout. +var ol_timeout = 0; + +// DELAY - Default delay for onset of popup. By default there is no delay. +var ol_delay = 0; + +// HAUTO - If overLIB should decide the horizontal placement. +var ol_hauto = 0; + +// VAUTO - If overLIB should decide the vertical placement. +var ol_vauto = 0; + +// NOJUSTX - If overLIB should let popups overrun the left or right window margins. +var ol_nojustx = 0; + +// NOJUSTY - If overLIB should let popups overrun the top or bottom window margins. +var ol_nojusty = 0; + +// LABEL - A labeling string for the primary popup while it is displayed (visible). +var ol_label = ""; + +// DECODE - If overLIB should automatically decode any URL-encoded characters in +// lead argument and/or caption. +var ol_decode = ""; + +//////////////////////////////////////////////////////////////////////////////////// +// ARRAY CONFIGURATION FOR CORE MODULE overlibmws.js +//////////////////////////////////////////////////////////////////////////////////// + +// INARRAY - Array with texts. +var ol_texts = new Array( + "Text 0", + "Text 1"); + +// CAPARRAY - Array with captions. +var ol_caps = new Array( + "Caption 0", + "Caption 1"); + +//////////////////////////////////////////////////////////////////////////////////// +// END CONFIGURATION FOR overlibmws.js +//////////////////////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////////////////////// +// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_bubble.js +//////////////////////////////////////////////////////////////////////////////////// + +// BUBBLE - Whether to use a bubble type popup. Default is no (0). +var ol_bubble = 0; + +// BUBBLETYPE - Type of bubble image to use. Default is 'flower'. Other options are +// 'oval', 'square', 'pushpin', 'quotation', or 'roundedcorners'. Specify directory +// for images via the last parameter of registerImages() near the top of the plugin +// module (default value is './'). +var ol_bubbletype = 'flower'; + +// ADJBUBBLE - Whether to resize the image in relation to the content. +// Default is no (0). +var ol_adjbubble = 0; + +//////////////////////////////////////////////////////////////////////////////////// +// END CONFIGURATION FOR overlibmws_bubble.js +//////////////////////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////////////////////// +// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_crossframe.js +//////////////////////////////////////////////////////////////////////////////////// + +You must import this plugin module to use the FRAME command, but its configuration +variable, ol_frame, is set in the core module. + +//////////////////////////////////////////////////////////////////////////////////// +// END CONFIGURATION FOR overlibmws_crossframe.js +//////////////////////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////////////////////// +// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_debug.js +//////////////////////////////////////////////////////////////////////////////////// + +// ALLOWDEBUG - The ID or a comma-separated list of IDs for debug layers which, if +// invoked following an overlib call and then made hidden via the close link at +// upper right, should be made visible again whenever that overlib call occurs. +var ol_allowdebug = ""; + +//////////////////////////////////////////////////////////////////////////////////// +// END CONFIGURATION FOR overlibmws_debug.js +//////////////////////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////////////////////// +// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_draggable.js +//////////////////////////////////////////////////////////////////////////////////// + +// DRAGGABLE - If sticky should be draggable. +var ol_draggable = 0; + +// DRAGCAP - Restrict dragging handle to the caption. +var ol_dragcap = 0; + +// DRAGID - The id of a container div with a CSS class that uses overflow:auto +// for a DRAGGABLE popup that doesn't have iframe content and doesn't use DRAGCAP. +var ol_dragid = ''; + +//////////////////////////////////////////////////////////////////////////////////// +// END CONFIGURATION FOR overlibmws_draggable.js +//////////////////////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////////////////////// +// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_exclusive.js +//////////////////////////////////////////////////////////////////////////////////// + +// EXCLUSIVE - Decides if a sticky primary popup should be exclusive, such that no other +// primry popup can be invoked and replace it before the sticky is closed by the user or +// a timeout (secondary popups can still be invoked from within the exclusive primary). +var ol_exclusive = 0; + +// EXCLUSIVESTATUS - Status line string to use for exclusive stickies +var ol_exclusivestatus = 'Please act on or close the open popup.'; + +// EXCLUSIVEOVERRIDE = If a displayed exclusive sticky should be overridden by the +// current overlib call for a popup. +var ol_exclusiveoverride=0; + +//////////////////////////////////////////////////////////////////////////////////// +// END CONFIGURATION FOR overlibmws_exclusive.js +//////////////////////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////////////////////// +// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_filter.js +//////////////////////////////////////////////////////////////////////////////////// + +// FILTER - Toggles on the filter feature set for IE v5.5+ browsers. Defualt is off. +var ol_filter=0; + +// FADEIN - Filter type for stylinzed fadein. Value can be 0 - 50 for the 51 types, +// or 51 (default) for random selections of the type across successive occurrences +// of the popup. +var ol_fadein=51; + +// FADETIME - Duration of fadein (millisec). +var ol_fadetime=800; + +// FILTEROPACITY - Opacity of entire popup. The higher the number in the range of 1-99, +// the more more opaque (less transparent) the popup will be. But 0 is handled as +// equivalent to 100 (no transparency). This feature also is implemented for Mozilla +// and Netscape v6+ browsers. +var ol_filteropacity=100; + +// FILTERSHADOW - Type of filter-based shadow. Default is off (0). +// Dropshadow is 1. Shadow (tapers from corners) is 2. +var ol_filtershadow=0; + +// FILTERSHADOWCOLOR - Color of filter-based shadow. +var ol_filtershadowcolor="#cccccc"; + +//////////////////////////////////////////////////////////////////////////////////// +// END CONFIGURATION FOR overlibmws_filter.js +//////////////////////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////////////////////// +// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_function.js +//////////////////////////////////////////////////////////////////////////////////// + +// FUNCTION - Default javascript function. By default there is none. +var ol_function = null; + +//////////////////////////////////////////////////////////////////////////////////// +// END CONFIGURATION FOR overlibmws_function.js +//////////////////////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////////////////////// +// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_hide.js +//////////////////////////////////////////////////////////////////////////////////// + +// HIDESELECTBOXES - Whether to hide any select boxes which overlap the popup +// while the popup is being displayed. +var ol_hideselectboxes=0; + +// HIDEBYID - An id or comma-separated list of id's to be hidden while the popup +// is displayed. Is intended for form elements and is ignored for any browsers +// using HIDESELECTBOXES and for Opera v7+. +var ol_hidebyid=''; + +// HIDEBYIDALL - An id or comma=separated list of id's to be hidden while the popup +// is displayed. Is intended for non-form elements with system controls, e.g., +// flash objects and applets. +var ol_hidebyidall=''; + +// HIDEBYIDNS4 - An id or comma-separated list of id's for positioned div's to be +// hidden while the popup is being displayed by Netscape v4.x browsers. +var ol_hidebyidns4=''; + +//////////////////////////////////////////////////////////////////////////////////// +// END CONFIGURATION FOR overlibmws_hide.js +//////////////////////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////////////////////// +// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_modal.js +//////////////////////////////////////////////////////////////////////////////////// + +// MODAL - Whether to make the popup modal (block access to any other items in the +// document via a shield until the popup is acted upon and closed). +var ol_modal = 0; + +// MODALCOLOR - The color of the modal shield. +var ol_modalcolor = '#bbbbbb'; + +// MODALOPACITY - The opacity of the modal shield. +var ol_modalopacity = 40; + +//////////////////////////////////////////////////////////////////////////////////// +// END CONFIGURATION FOR overlibmws_overtwo.js +//////////////////////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////////////////////// +// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_overtwo.js +//////////////////////////////////////////////////////////////////////////////////// + +// LABEL - A labeling string for the secondary popup while it is displayed (visible). +var ol_label = ""; + +//////////////////////////////////////////////////////////////////////////////////// +// END CONFIGURATION FOR overlibmws_overtwo.js +//////////////////////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////////////////////// +// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_print.js +//////////////////////////////////////////////////////////////////////////////////// + +// PRINT - Whether sticky should include a Print link or button. +var ol_print = 0; + +// PRINTBUTTON - Whether to use button in main text area even if caption area is present. +var ol_printbutton=0; + +// NOAUTOPRINT - Whether to block automatic printing and deletion of temporary printing window. +var ol_noautoprint=0; + +// PRINTCOLOR - Color of "Print" link in caption area of sticky. +var ol_printcolor="#eeeeff"; + +// PRINTFONT - Font face for the print text. +var ol_printfont="Verdana,Arial,Helvetica"; + +// PRINTSIZE - Font size for the print text. +var ol_printsize=1; + +// PRINTTEXT - Text for the sticky popup print link. Normal is "Print". +var ol_printtext='Print'; + +// PRINTBUTTONTEXT - Text for the sticky popup print button. Normal is "Print". +var ol_printbuttontext='Print'; + +// PRINTTITLE - Text to use as value of TITLE attribute for browser-generated TooTips +// with the "Print" link in captions of stickies or "Print" button in main text area. +var ol_printtitle="Click to Print"; + +// PRINTFONTCLASS - Print font class. +var ol_printfontclass=""; + +// PRINTCSSFILE - URL for .ccs file with CSS rules for styling the popup. +var ol_printcssfile=""; + +// PRINTXML - String for (optional) xml tag for temporary printing window. +var ol_printxml=""; + +// PRINTDOCTYPE - String for DOCTYPE declaration for temporary printing window. +var ol_printdoctype= + '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ' ++'"http://www.w3.org/TR/html4/loose.dtd">'; + +// PRINTROOT - String for root tag for temporary printing window. +var ol_printroot="<html>"; + +// PRINTTYPE - String for MIME type for temporary printing window. +var ol_printtype="text/html"; + +// PRINTCHARSET - String for charset for temporary printing window. +var ol_printcharset="iso-8859-1"; + +// PRINTURL - URL for a document to be printed via the temporary printing window. +var ol_printurl=""; + +// PRINTJOB - string for an external function to be used for the temporary printing window. +var ol_printjob=""; + +//////////////////////////////////////////////////////////////////////////////////// +// END CONFIGURATION FOR overlibmws_print.js +//////////////////////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////////////////////// +// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_scroll.js +//////////////////////////////////////////////////////////////////////////////////// + +// SCROLL - Whether sticky should scroll with the document when positioned via +// RELX or MIDX, and RELY or MIDY. +var ol_scroll = 0; + +//////////////////////////////////////////////////////////////////////////////////// +// END CONFIGURATION FOR overlibmws_scroll.js +//////////////////////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////////////////////// +// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_shadow.js +//////////////////////////////////////////////////////////////////////////////////// + +// SHADOW - Whether to add a dropshadow. Default is no (0). +var ol_shadow = 0; + +// SHADOWX - Horizontal dropshadow displacement in pixels. +// Positive is to the right and negative is to the left. +var ol_shadowx = 5; + +// SHADOWY - Vertical dropshadow displacement in pixels. +// Positive is downward and negative is upward. +var ol_shadowy = 5; + +// SHADOWCOLOR - Dropshadow color. +var ol_shadowcolor = "#666666"; + +// SHADOWIMAGE - Dropshadow background image. Default is none. +var ol_shadowimage = ""; + +// SHADOWOPACITY - Dropshadow opacity (100 is solid; 0 turns off this feature and +// thus also yields a solid shadow). Default is 60. +var ol_shadowopacity = 60; + +//////////////////////////////////////////////////////////////////////////////////// +// END CONFIGURATION FOR overlibmws_shadow.js +//////////////////////////////////////////////////////////////////////////////////// + diff --git a/src/extras/sos-html-logs/share/html/overlib/overlibmws.js b/src/extras/sos-html-logs/share/html/overlib/overlibmws.js new file mode 100644 index 00000000..454a306a --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/overlibmws.js @@ -0,0 +1,666 @@ +/*
+ Do not remove or change this notice.
+ overlibmws.js core module - Copyright Foteos Macrides 2002-2007. All rights reserved.
+ Initial: August 18, 2002 - Last Revised: October 8, 2007
+ This module is subject to the same terms of usage as for Erik Bosrup's overLIB,
+ though only a minority of the code and API now correspond with Erik's version.
+ See the overlibmws Change History and Command Reference via:
+
+ http://www.macridesweb.com/oltest/
+
+ Published under an open source license: http://www.macridesweb.com/oltest/license.html
+ Give credit on sites that use overlibmws and submit changes so others can use them as well.
+ You can get Erik's version via: http://www.bosrup.com/web/overlib/
+*/
+
+// PRE-INIT -- Ignore these lines, configuration is below.
+var OLloaded=0,pmCnt=1,pMtr=new Array(),OLcmdLine=new Array(),OLrunTime=new Array(),OLv,OLudf,
+OLpct=new Array("83%","67%","83%","100%","117%","150%","200%","267%"),OLrefXY,OLbubblePI=0,
+OLcrossframePI=0,OLdebugPI=0,OLdraggablePI=0,OLexclusivePI=0,OLfilterPI=0,OLfunctionPI=0,
+OLhidePI=0,OLiframePI=0,OLmodalPI=0,OLovertwoPI=0,OLscrollPI=0,OLshadowPI=0,OLprintPI=0;
+if(typeof OLgateOK=='undefined')var OLgateOK=1;
+var OLp1or2c='inarray,caparray,caption,closetext,right,left,center,autostatuscap,padx,pady,'
++'below,above,vcenter,donothing',OLp1or2co='nofollow,background,offsetx,offsety,fgcolor,'
++'bgcolor,cgcolor,textcolor,capcolor,width,wrap,wrapmax,height,border,base,status,autostatus,'
++'snapx,snapy,fixx,fixy,relx,rely,midx,midy,ref,refc,refp,refx,refy,fgbackground,bgbackground,'
++'cgbackground,fullhtml,capicon,textfont,captionfont,textsize,captionsize,timeout,delay,hauto,'
++'vauto,nojustx,nojusty,fgclass,bgclass,cgclass,capbelow,textpadding,textfontclass,'
++'captionpadding,captionfontclass,sticky,noclose,mouseoff,offdelay,closecolor,closefont,'
++'closesize,closeclick,closetitle,closefontclass,decode',OLp1or2o='text,cap,close,hpos,vpos,'
++'padxl,padxr,padyt,padyb',OLp1co='label',OLp1or2=OLp1or2co+','+OLp1or2o,OLp1=OLp1co+','+'frame';
+OLregCmds(OLp1or2c+','+OLp1or2co+','+OLp1co);
+function OLud(v){return eval('typeof ol_'+v+'=="undefined"')?1:0;}
+
+// DEFAULT CONFIGURATION -- See overlibConfig.txt for descriptions
+if(OLud('fgcolor'))var ol_fgcolor="#ccccff";
+if(OLud('bgcolor'))var ol_bgcolor="#333399";
+if(OLud('cgcolor'))var ol_cgcolor="#333399";
+if(OLud('textcolor'))var ol_textcolor="#000000";
+if(OLud('capcolor'))var ol_capcolor="#ffffff";
+if(OLud('closecolor'))var ol_closecolor="#eeeeff";
+if(OLud('textfont'))var ol_textfont="Verdana,Arial,Helvetica";
+if(OLud('captionfont'))var ol_captionfont="Verdana,Arial,Helvetica";
+if(OLud('closefont'))var ol_closefont="Verdana,Arial,Helvetica";
+if(OLud('textsize'))var ol_textsize=1;
+if(OLud('captionsize'))var ol_captionsize=1;
+if(OLud('closesize'))var ol_closesize=1;
+if(OLud('fgclass'))var ol_fgclass="";
+if(OLud('bgclass'))var ol_bgclass="";
+if(OLud('cgclass'))var ol_cgclass="";
+if(OLud('textpadding'))var ol_textpadding=2;
+if(OLud('textfontclass'))var ol_textfontclass="";
+if(OLud('captionpadding'))var ol_captionpadding=2;
+if(OLud('captionfontclass'))var ol_captionfontclass="";
+if(OLud('closefontclass'))var ol_closefontclass="";
+if(OLud('close'))var ol_close="Close";
+if(OLud('closeclick'))var ol_closeclick=0;
+if(OLud('closetitle'))var ol_closetitle="Click to Close";
+if(OLud('text'))var ol_text="Default Text";
+if(OLud('cap'))var ol_cap="";
+if(OLud('capbelow'))var ol_capbelow=0;
+if(OLud('background'))var ol_background="";
+if(OLud('width'))var ol_width=200;
+if(OLud('wrap'))var ol_wrap=0;
+if(OLud('wrapmax'))var ol_wrapmax=0;
+if(OLud('height'))var ol_height= -1;
+if(OLud('border'))var ol_border=1;
+if(OLud('base'))var ol_base=0;
+if(OLud('offsetx'))var ol_offsetx=10;
+if(OLud('offsety'))var ol_offsety=10;
+if(OLud('sticky'))var ol_sticky=0;
+if(OLud('nofollow'))var ol_nofollow=0;
+if(OLud('noclose'))var ol_noclose=0;
+if(OLud('mouseoff'))var ol_mouseoff=0;
+if(OLud('offdelay'))var ol_offdelay=300;
+if(OLud('hpos'))var ol_hpos=RIGHT;
+if(OLud('vpos'))var ol_vpos=BELOW;
+if(OLud('status'))var ol_status="";
+if(OLud('autostatus'))var ol_autostatus=0;
+if(OLud('snapx'))var ol_snapx=0;
+if(OLud('snapy'))var ol_snapy=0;
+if(OLud('fixx'))var ol_fixx= -1;
+if(OLud('fixy'))var ol_fixy= -1;
+if(OLud('relx'))var ol_relx=null;
+if(OLud('rely'))var ol_rely=null;
+if(OLud('midx'))var ol_midx=null;
+if(OLud('midy'))var ol_midy=null;
+if(OLud('ref'))var ol_ref="";
+if(OLud('refc'))var ol_refc='UL';
+if(OLud('refp'))var ol_refp='UL';
+if(OLud('refx'))var ol_refx=0;
+if(OLud('refy'))var ol_refy=0;
+if(OLud('fgbackground'))var ol_fgbackground="";
+if(OLud('bgbackground'))var ol_bgbackground="";
+if(OLud('cgbackground'))var ol_cgbackground="";
+if(OLud('padxl'))var ol_padxl=1;
+if(OLud('padxr'))var ol_padxr=1;
+if(OLud('padyt'))var ol_padyt=1;
+if(OLud('padyb'))var ol_padyb=1;
+if(OLud('fullhtml'))var ol_fullhtml=0;
+if(OLud('capicon'))var ol_capicon="";
+if(OLud('frame'))var ol_frame=self;
+if(OLud('timeout'))var ol_timeout=0;
+if(OLud('delay'))var ol_delay=0;
+if(OLud('hauto'))var ol_hauto=0;
+if(OLud('vauto'))var ol_vauto=0;
+if(OLud('nojustx'))var ol_nojustx=0;
+if(OLud('nojusty'))var ol_nojusty=0;
+if(OLud('label'))var ol_label="";
+if(OLud('decode'))var ol_decode=0;
+// ARRAY CONFIGURATION - See overlibConfig.txt for descriptions.
+if(OLud('texts'))var ol_texts=new Array("Text 0","Text 1");
+if(OLud('caps'))var ol_caps=new Array("Caption 0","Caption 1");
+// END CONFIGURATION -- Don't change anything below, all configuration is above.
+
+// INIT -- Runtime variables.
+var o3_text="",o3_cap="",o3_sticky=0,o3_nofollow=0,o3_background="",o3_noclose=0,o3_mouseoff=0,
+o3_offdelay=300,o3_hpos=RIGHT,o3_offsetx=10,o3_offsety=10,o3_fgcolor="",o3_bgcolor="",
+o3_cgcolor="",o3_textcolor="",o3_capcolor="",o3_closecolor="",o3_width=200,o3_wrap=0,
+o3_wrapmax=0,o3_height= -1,o3_border=1,o3_base=0,o3_status="",o3_autostatus=0,o3_snapx=0,
+o3_snapy=0,o3_fixx= -1,o3_fixy= -1,o3_relx=null,o3_rely=null,o3_midx=null,o3_midy=null,o3_ref="",
+o3_refc='UL',o3_refp='UL',o3_refx=0,o3_refy=0,o3_fgbackground="",o3_bgbackground="",
+o3_cgbackground="",o3_padxl=0,o3_padxr=0,o3_padyt=0,o3_padyb=0,o3_fullhtml=0,o3_vpos=BELOW,
+o3_capicon="",o3_textfont="Verdana,Arial,Helvetica",o3_captionfont="",o3_closefont="",
+o3_textsize=1,o3_captionsize=1,o3_closesize=1,o3_frame=self,o3_timeout=0,o3_delay=0,o3_hauto=0,
+o3_vauto=0,o3_nojustx=0,o3_nojusty=0,o3_close="",o3_closeclick=0,o3_closetitle="",o3_fgclass="",
+o3_bgclass="",o3_cgclass="",o3_textpadding=2,o3_textfontclass="",o3_captionpadding=2,
+o3_captionfontclass="",o3_closefontclass="",o3_capbelow=0,o3_label="",o3_decode=0,
+CSSOFF=DONOTHING,CSSCLASS=DONOTHING,OLdelayid=0,OLtimerid=0,OLshowid=0,OLndt=0,over=null,
+OLfnRef="",OLhover=0,OLx=0,OLy=0,OLshowingsticky=0,OLallowmove=0,OLcC=null,
+OLua=(OLv=navigator.userAgent)?OLv.toLowerCase():'',
+OLns4=(navigator.appName=='Netscape'&&parseInt(navigator.appVersion)==4)?1:0,
+OLns6=(document.getElementById)?1:0,
+OLie4=(document.all)?1:0,
+OLgek=(OLv=OLua.match(/gecko\/(\d{8})/i))?parseInt(OLv[1]):0,
+OLmac=(OLua.indexOf('mac')>=0)?1:0,
+OLsaf=(OLua.indexOf('safari')>=0)?1:0,
+OLkon=(OLua.indexOf('konqueror')>=0)?1:0,
+OLkht=(OLsaf||OLkon)?1:0,
+OLopr=(OLua.indexOf('opera')>=0)?1:0,
+OLop7=(OLopr&&document.createTextNode)?1:0;
+if(OLopr){OLns4=OLns6=OLgek=0;if(!OLop7)OLie4=0;}
+var OLieM=((OLie4&&OLmac)&&!(OLkht||OLopr))?1:0,
+OLie5=0,OLie55=0;OLie7=0;if(OLie4&&!OLop7){
+if((OLv=OLua.match(/msie (\d\.\d+)\.*/i))&&(OLv=parseFloat(OLv[1]))>=5.0){
+OLie5=1;OLns6=0;if(OLv>=5.5)OLie55=1;if(OLv>=7.0)OLie7=1;}if(OLns6)OLie4=0;}
+if(OLns4)window.onresize=function(){location.reload();};var OLchkMh=1,OLdw;
+if(OLns4||OLie4||OLns6){OLmh();if(window.addEventListener)window.addEventListener("unload",
+OLulCl,false);}else{overlib=nd=cClick=OLpageDefaults=no_overlib;}
+function OLulCl(){if(over)cClick();window.removeEventListener("unload",OLulCl,false);}
+
+/*
+ PUBLIC FUNCTIONS
+*/
+// Loads defaults then args into runtime variables.
+function overlib(){
+if(!(OLloaded&&OLgateOK))return;if((OLexclusivePI)&&OLisExclusive(arguments))return true;
+if(OLchkMh)OLmh();if(OLndt&&!OLtimerid)OLndt=0;if(over)cClick();OLload(OLp1or2);OLload(OLp1);
+OLfnRef="";OLhover=0;OLsetRunTimeVar();OLparseTokens('o3_',arguments);
+if(!(over=OLmkLyr()))return false;if(o3_decode)OLdecode();if(OLprintPI)OLchkPrint();
+if(OLbubblePI)OLchkForBubbleEffect();if(OLdebugPI)OLsetDebugCanShow();
+if(OLshadowPI)OLinitShadow();if(OLiframePI)OLinitIfs();if(OLfilterPI)OLinitFilterLyr();
+if(OLexclusivePI&&o3_exclusive&&o3_exclusivestatus!="")o3_status=o3_exclusivestatus;
+else if(o3_autostatus==2&&o3_cap!="")o3_status=o3_cap;
+else if(o3_autostatus==1&&o3_text!="")o3_status=o3_text;if(!o3_delay){return OLmain();
+}else{OLdelayid=setTimeout("OLmain()",o3_delay);if(o3_status!=""){self.status=o3_status;
+return true;}else if(!(OLop7&&event&&event.type=='mouseover'))return false;}
+}
+
+// Clears popups if appropriate
+function nd(time){
+if(OLloaded&&OLgateOK){if(!((OLexclusivePI)&&OLisExclusive())){if(time&&over&&!o3_delay){
+if(OLtimerid>0)clearTimeout(OLtimerid);OLtimerid=(OLhover&&o3_frame==self&&!OLcursorOff())?0:
+setTimeout("cClick()",(o3_timeout=OLndt=time));}else{if(!OLshowingsticky){OLallowmove=0;
+if(over)OLhideObject(over);}}}}return false;
+}
+
+// Close function for stickies
+function cClick(){
+if(OLloaded&&OLgateOK){OLhover=0;if(over){if(OLovertwoPI&&over==over2)cClick2();
+OLhideObject(over);OLshowingsticky=0;}if(OLmodalPI)OLclearModal();}return false;
+}
+
+// Sets page-specific defaults.
+function OLpageDefaults(){
+OLparseTokens('ol_',arguments);
+}
+
+// Gets object referenced by its id or name
+function OLgetRef(l,d){var r=OLgetRefById(l,d);return (r)?r:OLgetRefByName(l,d);}
+
+// For unsupported browsers.
+function no_overlib(){return false;}
+
+/*
+ OVERLIB MAIN FUNCTION SET
+*/
+function OLmain(){
+o3_delay=0;
+if(o3_frame==self){if(o3_noclose)OLoptMOUSEOFF(0);else if(o3_mouseoff)OLoptMOUSEOFF(1);}
+if(o3_sticky)OLshowingsticky=1;OLdoLyr();OLallowmove=0;if(o3_timeout>0){
+if(OLtimerid>0)clearTimeout(OLtimerid);OLtimerid=setTimeout("cClick()",o3_timeout);}
+if(o3_ref){OLrefXY=OLgetRefXY(o3_ref);if(OLrefXY[0]==null){o3_ref="";o3_midx=0;o3_midy=0;}}
+OLdisp(o3_status);if(OLdraggablePI)OLcheckDrag();
+if(o3_status!="")return true;else if(!(OLop7&&event&&event.type=='mouseover'))return false;
+}
+
+// Loads o3_ variables
+function OLload(c){var i,m=c.split(',');for(i=0;i<m.length;i++)eval('o3_'+m[i]+'=ol_'+m[i]);}
+
+// Chooses LGF
+function OLdoLGF(){
+return (o3_background!=''||o3_fullhtml)?OLcontentBackground(o3_text,o3_background,o3_fullhtml):
+(o3_cap=="")?OLcontentSimple(o3_text):
+(o3_sticky)?OLcontentCaption(o3_text,o3_cap,o3_close):OLcontentCaption(o3_text,o3_cap,'');
+}
+
+// Makes Layer
+function OLmkLyr(id,f,z){
+id=(id||'overDiv');f=(f||o3_frame);z=(z||1000);var fd=f.document,d=OLgetRefById(id,fd);
+if(!d){if(OLns4)d=fd.layers[id]=new Layer(1024,f);else if(OLie4&&!document.getElementById){
+fd.body.insertAdjacentHTML('BeforeEnd','<div id="'+id+'"></div>');d=fd.all[id];
+}else{d=fd.createElement('div');if(d){d.id=id;fd.body.appendChild(d);}}if(!d)return null;
+if(OLns4)d.zIndex=z;else{var o=d.style;o.position='absolute';o.visibility='hidden';o.zIndex=z;}}
+return d;
+}
+
+// Creates and writes layer content
+function OLdoLyr(){
+if(o3_sticky&&OLtimerid>0){clearTimeout(OLtimerid);OLtimerid=0;}
+if(o3_background==''&&!o3_fullhtml){
+if(o3_fgbackground!='')o3_fgbackground=' background="'+o3_fgbackground+'"';
+if(o3_bgbackground!='')o3_bgbackground=' background="'+o3_bgbackground+'"';
+if(o3_cgbackground!='')o3_cgbackground=' background="'+o3_cgbackground+'"';
+if(o3_fgcolor!='')o3_fgcolor=' bgcolor="'+o3_fgcolor+'"';
+if(o3_bgcolor!='')o3_bgcolor=' bgcolor="'+o3_bgcolor+'"';
+if(o3_cgcolor!='')o3_cgcolor=' bgcolor="'+o3_cgcolor+'"';
+if(o3_height>0)o3_height=' height="'+o3_height+'"';else o3_height='';}
+if(!OLns4)OLrepositionTo(over,(OLns6?20:0),0);var lyrHtml=OLdoLGF();
+if(o3_wrap&&!o3_fullhtml){OLlayerWrite(lyrHtml);
+o3_width=(OLns4?over.clip.width:over.offsetWidth);if(OLie4){var w=OLfd().clientWidth;
+if(o3_width>=w){if(OLop7){if(OLovertwoPI&&over==over2){var z=over2.style.zIndex;
+o3_frame.document.body.removeChild(over);over2=OLmkLyr('overDiv2',o3_frame,z);over=over2;
+}else{o3_frame.document.body.removeChild(over);over=OLmkLyr();}}o3_width=w-20;}}
+if(o3_wrapmax<1&&o3_frame.innerWidth)o3_wrapmax=o3_frame.innerWidth-40;
+if(o3_wrapmax>0&&o3_width>o3_wrapmax)o3_width=o3_wrapmax;o3_wrap=0;lyrHtml=OLdoLGF();}
+OLlayerWrite(lyrHtml);o3_width=(OLns4?over.clip.width:over.offsetWidth);
+if(OLbubblePI)OLgenerateBubble(lyrHtml);
+}
+
+/*
+ LAYER GENERATION FUNCTIONS
+*/
+// Makes simple table without caption
+function OLcontentSimple(txt){
+var t=OLbgLGF()+OLfgLGF(txt)+OLbaseLGF();OLsetBackground('');return t;
+}
+
+// Makes table with caption and optional close link
+function OLcontentCaption(txt,title,close){
+var closing=(OLprintPI?OLprintCapLGF():''),closeevent='onmouseover',caption,t,
+cC='javascript:return '+OLfnRef+(OLovertwoPI&&over==over2?'cClick2();':'cClick();');
+if(o3_closeclick)closeevent=(o3_closetitle?'title="'+o3_closetitle+'" ':'')+'onclick';
+if(o3_capicon!=''&&o3_capicon.indexOf('<img')!=0)o3_capicon='<img src="'+o3_capicon+'" /> ';
+if(close){closing+='<td align="right"><a href="'+cC+'" '+closeevent+'="'+cC+'"'
++(o3_closefontclass?' class="'+o3_closefontclass+'">':(OLns4?'><':'')
++OLlgfUtil(0,1,'','a',o3_closecolor,o3_closefont,o3_closesize))+close+
+(o3_closefontclass?'':(OLns4?OLlgfUtil(1,1,'','a'):''))+'</a></td>';}
+caption='<table id="overCap'+(OLovertwoPI&&over==over2?'2':'')+'"'+OLwd(0)
++' border="0" cellpadding="'+o3_captionpadding+'" cellspacing="0"'+(o3_cgclass?' class="'
++o3_cgclass+'"':o3_cgcolor+o3_cgbackground)+'><tr><td'+OLwd(0)+(o3_cgclass?' class="'
++o3_cgclass+'">':'>')+(o3_captionfontclass?'<div class="'+o3_captionfontclass
++'">':OLlgfUtil(0,1,'','div',o3_capcolor,o3_captionfont,o3_captionsize))+o3_capicon+title
++OLlgfUtil(1,1,'','div')+'</td>'+closing+'</tr></table>';
+t=OLbgLGF()+(o3_capbelow?OLfgLGF(txt)+caption:caption+OLfgLGF(txt))+OLbaseLGF();
+OLsetBackground('');return t;
+}
+
+// For BACKGROUND and FULLHTML commands
+function OLcontentBackground(txt,image,hasfullhtml){
+var t;if(hasfullhtml){t=txt;}else{t='<table'+OLwd(1)+' border="0" cellpadding="0" '
++'cellspacing="0" '+'height="'+o3_height+'"><tr><td colspan="3" height="'+o3_padyt
++'"></td></tr><tr><td width="'+o3_padxl+'"></td><td valign="top"'+OLwd(2)+'>'
++OLlgfUtil(0,0,o3_textfontclass,'div',o3_textcolor,o3_textfont,o3_textsize)+txt+
+OLlgfUtil(1,0,'','div')+'</td><td width="'+o3_padxr+'"></td></tr><tr><td colspan="3" height="'
++o3_padyb+'"></td></tr></table>';}OLsetBackground(image);return t;
+}
+
+// LGF utilities
+function OLbgLGF(){
+return '<table'+OLwd(1)+o3_height+' border="0" cellpadding="'+o3_border+'" cellspacing="0"'
++(o3_bgclass?' class="'+o3_bgclass+'"':o3_bgcolor+o3_bgbackground)+'><tr><td>';
+}
+function OLfgLGF(t){
+return '<table'+OLwd(0)+o3_height+' border="0" cellpadding="'+o3_textpadding
++'" cellspacing="0"'+(o3_fgclass?' class="'+o3_fgclass+'"':o3_fgcolor+o3_fgbackground)
++'><tr><td valign="top"'+(o3_fgclass?' class="'+o3_fgclass+'"':'')+'>'
++OLlgfUtil(0,0,o3_textfontclass,'div',o3_textcolor,o3_textfont,o3_textsize)+t
++(OLprintPI?OLprintFgLGF():'')+OLlgfUtil(1,0,'','div')+'</td></tr></table>';
+}
+function OLlgfUtil(end,stg,tfc,ele,col,fac,siz){
+if(end)return('</'+(OLns4?'font'+(stg?'></strong':''):ele)+'>');
+else return(tfc?'<div class="'+tfc+'">':((ele=='a'?'':'<')+(OLns4?(stg?'strong><':'')
++'font color="'+col+'" face="'+OLquoteMultiNameFonts(fac)+'" size="'+siz:(ele=='a'?'':ele)
++' style="color:'+col+(stg?';font-weight:bold':'')+';font-family:'+OLquoteMultiNameFonts(fac)
++';font-size:'+siz+';'+(ele=='span'?'text-decoration:underline;':''))+'">'));
+}
+function OLquoteMultiNameFonts(f){
+var i,v,pM=f.split(',');
+for(i=0;i<pM.length;i++){v=pM[i];v=v.replace(/^\s+/,'').replace(/\s+$/,'');
+if(/\s/.test(v) && !/['"]/.test(v)){v="\'"+v+"\'";pM[i]=v;}}return pM.join();
+}
+function OLbaseLGF(){
+return ((o3_base>0&&!o3_wrap)?('<table width="100%" border="0" cellpadding="0" cellspacing="0"'
++(o3_bgclass?' class="'+o3_bgclass+'"':'')+'><tr><td height="'+o3_base
++'"></td></tr></table>'):'')+'</td></tr></table>';
+}
+function OLwd(a){
+return(o3_wrap?'':' width="'+(!a?'100%':(a==1?o3_width:(o3_width-o3_padxl-o3_padxr)))+'"');
+}
+
+// Loads image into the div.
+function OLsetBackground(i){
+if(i==''){if(OLns4)over.background.src=null;else{if(OLns6)over.style.width='';
+over.style.backgroundImage='none';}}else{if(OLns4)over.background.src=i;else{
+if(OLns6)over.style.width=o3_width+'px';over.style.backgroundImage='url('+i+')';}}
+}
+
+/*
+ HANDLING FUNCTIONS
+*/
+// Displays layer
+function OLdisp(s){
+if(OLmodalPI)OLchkModal();if(!OLallowmove){if(OLshadowPI)OLdispShadow();
+if(OLiframePI)OLdispIfs();OLplaceLayer();if(OLndt)OLshowObject(over);
+else OLshowid=setTimeout("OLshowObject(over)",1);
+OLallowmove=(o3_sticky||o3_nofollow)?0:1;}OLndt=0;if(s!="")self.status=s;
+}
+
+// Decides placement of layer.
+function OLplaceLayer(){
+var snp,X,Y,pgLeft,pgTop,pWd=o3_width,pHt,iWd=100,iHt=100,SB=0,LM=0,CX=0,TM=0,BM=0,CY=0,
+o=OLfd(),nsb=(OLgek>=20010505&&!o3_frame.scrollbars.visible)?1:0;
+if(!OLkht&&o&&o.clientWidth)iWd=o.clientWidth;
+else if(o3_frame.innerWidth){SB=Math.ceil(1.4*(o3_frame.outerWidth-o3_frame.innerWidth));
+if(SB>20)SB=20;iWd=o3_frame.innerWidth;}
+pgLeft=(OLie4)?o.scrollLeft:o3_frame.pageXOffset;
+if(OLie55&&OLfilterPI&&o3_filter&&o3_filtershadow)SB=CX=5;else
+if((OLshadowPI)&&bkdrop&&o3_shadow&&o3_shadowx){SB+=((o3_shadowx>0)?o3_shadowx:0);
+LM=((o3_shadowx<0)?Math.abs(o3_shadowx):0);CX=Math.abs(o3_shadowx);}
+if(o3_ref!=""||o3_fixx> -1||o3_relx!=null||o3_midx!=null){
+if(o3_ref!=""){X=OLrefXY[0];if(OLie55&&OLfilterPI&&o3_filter&&o3_filtershadow){
+if(o3_refp=='UR'||o3_refp=='LR')X-=5;}
+else if((OLshadowPI)&&bkdrop&&o3_shadow&&o3_shadowx){
+if(o3_shadowx<0&&(o3_refp=='UL'||o3_refp=='LL'))X-=o3_shadowx;else
+if(o3_shadowx>0&&(o3_refp=='UR'||o3_refp=='LR'))X-=o3_shadowx;}
+}else{if(o3_midx!=null){
+X=parseInt(pgLeft+((iWd-pWd-SB-LM)/2)+o3_midx);
+}else{if(o3_relx!=null){
+if(o3_relx>=0)X=pgLeft+o3_relx+LM;else X=pgLeft+o3_relx+iWd-pWd-SB;
+}else{X=o3_fixx+LM;}}}
+}else{
+if(o3_hauto){
+if(o3_hpos==LEFT&&OLx-pgLeft<iWd/2&&OLx-pWd-o3_offsetx<pgLeft+LM)o3_hpos=RIGHT;else
+if(o3_hpos==RIGHT&&OLx-pgLeft>iWd/2&&OLx+pWd+o3_offsetx>pgLeft+iWd-SB)o3_hpos=LEFT;}
+X=(o3_hpos==CENTER)?parseInt(OLx-((pWd+CX)/2)+o3_offsetx):
+(o3_hpos==LEFT)?OLx-o3_offsetx-pWd:OLx+o3_offsetx;
+if(o3_snapx>1){
+snp=X % o3_snapx;
+if(o3_hpos==LEFT){X=X-(o3_snapx+snp);}else{X=X+(o3_snapx-snp);}}}
+if(!o3_nojustx&&X+pWd>pgLeft+iWd-SB)
+X=iWd+pgLeft-pWd-SB;if(!o3_nojustx&&X-LM<pgLeft)X=pgLeft+LM;
+pgTop=OLie4?o.scrollTop:o3_frame.pageYOffset;
+if(!OLkht&&!nsb&&o&&o.clientHeight)iHt=o.clientHeight;
+else if(o3_frame.innerHeight)iHt=o3_frame.innerHeight;
+if(OLbubblePI&&o3_bubble)pHt=OLbubbleHt;else pHt=OLns4?over.clip.height:over.offsetHeight;
+if((OLshadowPI)&&bkdrop&&o3_shadow&&o3_shadowy){TM=(o3_shadowy<0)?Math.abs(o3_shadowy):0;
+if(OLie55&&OLfilterPI&&o3_filter&&o3_filtershadow)BM=CY=5;else
+BM=(o3_shadowy>0)?o3_shadowy:0;CY=Math.abs(o3_shadowy);}
+if(o3_ref!=""||o3_fixy> -1||o3_rely!=null||o3_midy!=null){
+if(o3_ref!=""){Y=OLrefXY[1];if(OLie55&&OLfilterPI&&o3_filter&&o3_filtershadow){
+if(o3_refp=='LL'||o3_refp=='LR')Y-=5;}else if((OLshadowPI)&&bkdrop&&o3_shadow&&o3_shadowy){
+if(o3_shadowy<0&&(o3_refp=='UL'||o3_refp=='UR'))Y-=o3_shadowy;else
+if(o3_shadowy>0&&(o3_refp=='LL'||o3_refp=='LR'))Y-=o3_shadowy;}
+}else{if(o3_midy!=null){
+Y=parseInt(pgTop+((iHt-pHt-CY)/2)+o3_midy);
+}else{if(o3_rely!=null){
+if(o3_rely>=0)Y=pgTop+o3_rely+TM;else Y=pgTop+o3_rely+iHt-pHt-BM;}else{
+Y=o3_fixy+TM;}}}
+}else{
+if(o3_vauto){
+if(o3_vpos==ABOVE&&OLy-pgTop<iHt/2&&OLy-pHt-o3_offsety<pgTop)o3_vpos=BELOW;else
+if(o3_vpos==BELOW&&OLy-pgTop>iHt/2&&OLy+pHt+o3_offsety+((OLns4||OLkht)?17:0)>pgTop+iHt-BM)
+o3_vpos=ABOVE;}Y=(o3_vpos==VCENTER)?parseInt(OLy-((pHt+CY)/2)+o3_offsety):
+(o3_vpos==ABOVE)?OLy-(pHt+o3_offsety+BM):OLy+o3_offsety+TM;
+if(o3_snapy>1){
+snp=Y % o3_snapy;
+if(pHt>0&&o3_vpos==ABOVE){Y=Y-(o3_snapy+snp);}else{Y=Y+(o3_snapy-snp);}}}
+if(!o3_nojusty&&Y+pHt+BM>pgTop+iHt)Y=pgTop+iHt-pHt-BM;if(!o3_nojusty&&Y-TM<pgTop)Y=pgTop+TM;
+OLrepositionTo(over,X,Y);
+if(OLshadowPI)OLrepositionShadow(X,Y);if(OLiframePI)OLrepositionIfs(X,Y);
+if(OLns6&&o3_frame.innerHeight){iHt=o3_frame.innerHeight;OLrepositionTo(over,X,Y);}
+if(OLscrollPI)OLchkScroll(X-pgLeft,Y-pgTop);
+}
+
+// Chooses body or documentElement
+function OLfd(f){
+var fd=((f)?f:o3_frame).document,fdc=fd.compatMode,fdd=fd.documentElement;
+return (!OLop7&&fdc&&fdc!='BackCompat'&&fdd&&fdd.clientWidth)?fd.documentElement:fd.body;
+}
+
+// Gets location of REFerence object
+function OLgetRefXY(r,d){
+var o=OLgetRef(r,d),ob=o,rXY=[o3_refx,o3_refy],of;if(!o)return [null,null];
+if(OLns4){if(typeof o.length!='undefined'&&o.length>1){ob=o[0];
+rXY[0]+=o[0].x+o[1].pageX;rXY[1]+=o[0].y+o[1].pageY;}else{
+if((o.toString().indexOf('Image')!= -1)||(o.toString().indexOf('Anchor')!= -1)){
+rXY[0]+=o.x;rXY[1]+=o.y;}else{rXY[0]+=o.pageX;rXY[1]+=o.pageY;}}
+}else{rXY[0]+=OLpageLoc(o,'Left');rXY[1]+=OLpageLoc(o,'Top');}
+of=OLgetRefOffsets(ob);rXY[0]+=of[0];rXY[1]+=of[1];return rXY;
+}
+
+// Seeks REFerence by id
+function OLgetRefById(l,d){
+l=(l||'overDiv');d=(d||o3_frame.document);var j,r;if(OLie4&&d.all)return d.all[l];
+if(d.getElementById)return d.getElementById(l);if(d.layers&&d.layers.length>0){
+if(d.layers[l])return d.layers[l];for(j=0;j<d.layers.length;j++){
+r=OLgetRefById(l,d.layers[j].document);if(r)return r;}}return null;
+}
+
+// Seeks REFerence by name
+function OLgetRefByName(l,d){
+d=(d||o3_frame.document);var j,r,v=OLie4?d.all.tags('iframe'):
+OLns6?d.getElementsByTagName('iframe'):null;
+if(typeof d.images!='undefined'&&d.images[l])return d.images[l];
+if(typeof d.anchors!='undefined'&&d.anchors[l])return d.anchors[l];
+if(v)for(j=0;j<v.length;j++)if(v[j].name==l)return v[j];
+if(d.layers&&d.layers.length>0)for(j=0;j<d.layers.length;j++){
+r=OLgetRefByName(l,d.layers[j].document);
+if(r&&r.length>0)return r;else if(r)return [r,d.layers[j]];}return null;
+}
+
+// Gets layer vs REFerence offsets
+function OLgetRefOffsets(o){
+var c=o3_refc.toUpperCase(),p=o3_refp.toUpperCase(),W=0,H=0,pW=0,pH=0,of=[0,0];
+pW=(OLbubblePI&&o3_bubble)?o3_width:OLns4?over.clip.width:over.offsetWidth;
+pH=(OLbubblePI&&o3_bubble)?OLbubbleHt:OLns4?over.clip.height:over.offsetHeight;
+if((!OLop7)&&o.toString().indexOf('Image')!= -1){W=o.width;H=o.height;
+}else if((!OLop7)&&o.toString().indexOf('Anchor')!= -1){c=o3_refc='UL';}else{
+W=(OLns4)?o.clip.width:o.offsetWidth;H=(OLns4)?o.clip.height:o.offsetHeight;}
+if((OLns4||(OLns6&&OLgek))&&o.border){W+=2*parseInt(o.border);H+=2*parseInt(o.border);}
+if(c=='UL'){of=(p=='UR')?[-pW,0]:(p=='LL')?[0,-pH]:(p=='LR')?[-pW,-pH]:[0,0];
+}else if(c=='UR'){of=(p=='UR')?[W-pW,0]:(p=='LL')?[W,-pH]:(p=='LR')?[W-pW,-pH]:[W,0];
+}else if(c=='LL'){of=(p=='UR')?[-pW,H]:(p=='LL')?[0,H-pH]:(p=='LR')?[-pW,H-pH]:[0,H];
+}else if(c=='LR'){of=(p=='UR')?[W-pW,H]:(p=='LL')?[W,H-pH]:(p=='LR')?[W-pW,H-pH]:[W,H];}
+return of;
+}
+
+// Gets x or y location of object
+function OLpageLoc(o,t){
+var l=0,s=o;while(o.offsetParent&&o.offsetParent.tagName.toLowerCase()!='html'){
+l+=o['offset'+t];o=o.offsetParent;}l+=o['offset'+t];while(s=s.parentNode){
+if((s['scroll'+t]>0)&&s.tagName.toLowerCase()=='div')l-=s['scroll'+t];}return l;
+}
+
+// Moves layer
+function OLmouseMove(e){
+var e=(e||event);OLcC=(OLovertwoPI&&over2&&over==over2?cClick2:cClick);
+OLx=(e.pageX||e.clientX+OLfd().scrollLeft);OLy=(e.pageY||e.clientY+OLfd().scrollTop);
+if((OLallowmove&&over)&&(o3_frame==self||over==OLgetRefById()
+||(OLovertwoPI&&over2==over&&over==OLgetRefById('overDiv2')))){
+OLplaceLayer();if(OLhidePI)OLhideUtil(0,1,1,0,0,0);}
+if(OLhover&&over&&o3_frame==self&&OLcursorOff())if(o3_offdelay<1)OLcC();else
+{if(OLtimerid>0)clearTimeout(OLtimerid);OLtimerid=setTimeout("OLcC()",o3_offdelay);}
+}
+
+// Capture mouse and chain other scripts.
+function OLmh(){
+var fN,f,j,k,s,mh=OLmouseMove,w=(OLns4&&window.onmousemove),re=/function[ ]*(\w*)\(/;
+OLdw=document;if(document.onmousemove||w){if(w)OLdw=window;f=OLdw.onmousemove.toString();
+fN=f.match(re);if(!fN||fN[1]=='anonymous'||fN[1]=='OLmouseMove'){OLchkMh=0;return;}
+if(fN[1])s=fN[1]+'(e)';else{j=f.indexOf('{');k=f.lastIndexOf('}')+1;s=f.substring(j,k);}
+s+=';OLmouseMove(e);';mh=new Function('e',s);}
+OLdw.onmousemove=mh;if(OLns4)OLdw.captureEvents(Event.MOUSEMOVE);
+}
+
+/*
+ PARSING
+*/
+function OLparseTokens(pf,ar){
+var i,v,md= -1,par=(pf!='ol_'),p=OLpar,q=OLparQuo,t=OLtoggle;OLudf=(par&&!ar.length?1:0);
+for(i=0;i<ar.length;i++){if(md<0){if(typeof ar[i]=='number'){OLudf=(par?1:0);i--;}
+else{switch(pf){case 'ol_':ol_text=ar[i];break;default:o3_text=ar[i];}}md=0;}else{
+if(ar[i]==INARRAY){OLudf=0;eval(pf+'text=ol_texts['+ar[++i]+']');continue;}
+if(ar[i]==CAPARRAY){eval(pf+'cap=ol_caps['+ar[++i]+']');continue;}
+if(ar[i]==CAPTION){q(ar[++i],pf+'cap');continue;}
+if(Math.abs(ar[i])==STICKY){t(ar[i],pf+'sticky');continue;}
+if(Math.abs(ar[i])==NOFOLLOW){t(ar[i],pf+'nofollow');continue;}
+if(ar[i]==BACKGROUND){q(ar[++i],pf+'background');continue;}
+if(Math.abs(ar[i])==NOCLOSE){t(ar[i],pf+'noclose');continue;}
+if(Math.abs(ar[i])==MOUSEOFF){t(ar[i],pf+'mouseoff');continue;}
+if(ar[i]==OFFDELAY){p(ar[++i],pf+'offdelay');continue;}
+if(ar[i]==RIGHT||ar[i]==LEFT||ar[i]==CENTER){p(ar[i],pf+'hpos');continue;}
+if(ar[i]==OFFSETX){p(ar[++i],pf+'offsetx');continue;}
+if(ar[i]==OFFSETY){p(ar[++i],pf+'offsety');continue;}
+if(ar[i]==FGCOLOR){q(ar[++i],pf+'fgcolor');continue;}
+if(ar[i]==BGCOLOR){q(ar[++i],pf+'bgcolor');continue;}
+if(ar[i]==CGCOLOR){q(ar[++i],pf+'cgcolor');continue;}
+if(ar[i]==TEXTCOLOR){q(ar[++i],pf+'textcolor');continue;}
+if(ar[i]==CAPCOLOR){q(ar[++i],pf+'capcolor');continue;}
+if(ar[i]==CLOSECOLOR){q(ar[++i],pf+'closecolor');continue;}
+if(ar[i]==WIDTH){p(ar[++i],pf+'width');continue;}
+if(Math.abs(ar[i])==WRAP){t(ar[i],pf+'wrap');continue;}
+if(ar[i]==WRAPMAX){p(ar[++i],pf+'wrapmax');continue;}
+if(ar[i]==HEIGHT){p(ar[++i],pf+'height');continue;}
+if(ar[i]==BORDER){p(ar[++i],pf+'border');continue;}
+if(ar[i]==BASE){p(ar[++i],pf+'base');continue;}
+if(ar[i]==STATUS){q(ar[++i],pf+'status');continue;}
+if(Math.abs(ar[i])==AUTOSTATUS){v=pf+'autostatus';
+eval(v+'=('+ar[i]+'<0)?('+v+'==2?2:0):('+v+'==1?0:1)');continue;}
+if(Math.abs(ar[i])==AUTOSTATUSCAP){v=pf+'autostatus';
+eval(v+'=('+ar[i]+'<0)?('+v+'==1?1:0):('+v+'==2?0:2)');continue;}
+if(ar[i]==CLOSETEXT){q(ar[++i],pf+'close');continue;}
+if(ar[i]==SNAPX){p(ar[++i],pf+'snapx');continue;}
+if(ar[i]==SNAPY){p(ar[++i],pf+'snapy');continue;}
+if(ar[i]==FIXX){p(ar[++i],pf+'fixx');continue;}
+if(ar[i]==FIXY){p(ar[++i],pf+'fixy');continue;}
+if(ar[i]==RELX){p(ar[++i],pf+'relx');continue;}
+if(ar[i]==RELY){p(ar[++i],pf+'rely');continue;}
+if(ar[i]==MIDX){p(ar[++i],pf+'midx');continue;}
+if(ar[i]==MIDY){p(ar[++i],pf+'midy');continue;}
+if(ar[i]==REF){q(ar[++i],pf+'ref');continue;}
+if(ar[i]==REFC){q(ar[++i],pf+'refc');continue;}
+if(ar[i]==REFP){q(ar[++i],pf+'refp');continue;}
+if(ar[i]==REFX){p(ar[++i],pf+'refx');continue;}
+if(ar[i]==REFY){p(ar[++i],pf+'refy');continue;}
+if(ar[i]==FGBACKGROUND){q(ar[++i],pf+'fgbackground');continue;}
+if(ar[i]==BGBACKGROUND){q(ar[++i],pf+'bgbackground');continue;}
+if(ar[i]==CGBACKGROUND){q(ar[++i],pf+'cgbackground');continue;}
+if(ar[i]==PADX){p(ar[++i],pf+'padxl');p(ar[++i],pf+'padxr');continue;}
+if(ar[i]==PADY){p(ar[++i],pf+'padyt');p(ar[++i],pf+'padyb');continue;}
+if(Math.abs(ar[i])==FULLHTML){t(ar[i],pf+'fullhtml');continue;}
+if(ar[i]==BELOW||ar[i]==ABOVE||ar[i]==VCENTER){p(ar[i],pf+'vpos');continue;}
+if(ar[i]==CAPICON){q(ar[++i],pf+'capicon');continue;}
+if(ar[i]==TEXTFONT){q(ar[++i],pf+'textfont');continue;}
+if(ar[i]==CAPTIONFONT){q(ar[++i],pf+'captionfont');continue;}
+if(ar[i]==CLOSEFONT){q(ar[++i],pf+'closefont');continue;}
+if(ar[i]==TEXTSIZE){q(ar[++i],pf+'textsize');continue;}
+if(ar[i]==CAPTIONSIZE){q(ar[++i],pf+'captionsize');continue;}
+if(ar[i]==CLOSESIZE){q(ar[++i],pf+'closesize');continue;}
+if(ar[i]==TIMEOUT){p(ar[++i],pf+'timeout');continue;}
+if(ar[i]==DELAY){p(ar[++i],pf+'delay');continue;}
+if(Math.abs(ar[i])==HAUTO){t(ar[i],pf+'hauto');continue;}
+if(Math.abs(ar[i])==VAUTO){t(ar[i],pf+'vauto');continue;}
+if(Math.abs(ar[i])==NOJUSTX){t(ar[i],pf+'nojustx');continue;}
+if(Math.abs(ar[i])==NOJUSTY){t(ar[i],pf+'nojusty');continue;}
+if(Math.abs(ar[i])==CLOSECLICK){t(ar[i],pf+'closeclick');continue;}
+if(ar[i]==CLOSETITLE){q(ar[++i],pf+'closetitle');continue;}
+if(ar[i]==FGCLASS){q(ar[++i],pf+'fgclass');continue;}
+if(ar[i]==BGCLASS){q(ar[++i],pf+'bgclass');continue;}
+if(ar[i]==CGCLASS){q(ar[++i],pf+'cgclass');continue;}
+if(ar[i]==TEXTPADDING){p(ar[++i],pf+'textpadding');continue;}
+if(ar[i]==TEXTFONTCLASS){q(ar[++i],pf+'textfontclass');continue;}
+if(ar[i]==CAPTIONPADDING){p(ar[++i],pf+'captionpadding');continue;}
+if(ar[i]==CAPTIONFONTCLASS){q(ar[++i],pf+'captionfontclass');continue;}
+if(ar[i]==CLOSEFONTCLASS){q(ar[++i],pf+'closefontclass');continue;}
+if(Math.abs(ar[i])==CAPBELOW){t(ar[i],pf+'capbelow');continue;}
+if(ar[i]==LABEL){q(ar[++i],pf+'label');continue;}
+if(Math.abs(ar[i])==DECODE){t(ar[i],pf+'decode');continue;}
+if(ar[i]==DONOTHING){continue;}
+i=OLparseCmdLine(pf,i,ar);}}
+if((OLfunctionPI)&&OLudf&&o3_function)o3_text=o3_function();
+if(pf=='o3_')OLfontSize();
+}
+function OLpar(a,v){eval(v+'='+a);}
+function OLparQuo(a,v){eval(v+"='"+OLescSglQt(a)+"'");}
+function OLescSglQt(s){return s.toString().replace(/\\/g,"\\\\").replace(/'/g,"\\'");}
+function OLtoggle(a,v){eval(v+'=('+v+'==0&&'+a+'>=0)?1:0');}
+function OLhasDims(s){return /[%\-a-z]+$/.test(s);}
+function OLfontSize(){
+var i;if(OLhasDims(o3_textsize)){if(OLns4)o3_textsize="2";}else
+if(!OLns4){i=parseInt(o3_textsize);o3_textsize=(i>0&&i<8)?OLpct[i]:OLpct[0];}
+if(OLhasDims(o3_captionsize)){if(OLns4)o3_captionsize="2";}else
+if(!OLns4){i=parseInt(o3_captionsize);o3_captionsize=(i>0&&i<8)?OLpct[i]:OLpct[0];}
+if(OLhasDims(o3_closesize)){if(OLns4)o3_closesize="2";}else
+if(!OLns4){i=parseInt(o3_closesize);o3_closesize=(i>0&&i<8)?OLpct[i]:OLpct[0];}
+if(OLprintPI)OLprintDims();
+}
+function OLdecode(){
+var re=/%[0-9A-Fa-f]{2,}/,t=o3_text,c=o3_cap,u=unescape,d=!OLns4&&(!OLgek||OLgek>=20020826)
+&&typeof decodeURIComponent?decodeURIComponent:u;if(typeof(window.TypeError)=='function'){
+if(re.test(t)){eval(new Array('try{','o3_text=d(t);','}catch(e){','o3_text=u(t);',
+'}').join('\n'))};if(c&&re.test(c)){eval(new Array('try{','o3_cap=d(c);','}catch(e){',
+'o3_cap=u(c);','}').join('\n'))}}else{if(re.test(t))o3_text=u(t);if(c&&re.test(c))o3_cap=u(c);}
+}
+
+/*
+ LAYER FUNCTIONS
+*/
+// Writes to layer
+function OLlayerWrite(t){
+t+="\n";if(OLns4){over.document.write(t);over.document.close();}
+else if(typeof over.innerHTML!='undefined'){if(OLieM)over.innerHTML='';over.innerHTML=t;
+}else{var range=o3_frame.document.createRange();range.setStartAfter(over);
+var domfrag=range.createContextualFragment(t);while(over.hasChildNodes()){
+over.removeChild(over.lastChild);}over.appendChild(domfrag);}
+if(OLprintPI)over.print=o3_print?t:null;
+}
+
+// Makes object visible
+function OLshowObject(o){
+OLshowid=0;o=(OLns4)?o:o.style;
+if(((OLfilterPI)&&!OLchkFilter(o))||!OLfilterPI)o.visibility="visible";
+if(OLshadowPI)OLshowShadow();if(OLiframePI)OLshowIfs();if(OLhidePI)OLhideUtil(1,1,0);
+}
+
+// Hides object
+function OLhideObject(o){
+if(OLshowid>0){clearTimeout(OLshowid);OLshowid=0;}
+if(OLtimerid>0)clearTimeout(OLtimerid);if(OLdelayid>0)clearTimeout(OLdelayid);
+OLtimerid=0;OLdelayid=0;self.status="";o3_label=ol_label;if(o3_frame!=self)o=OLgetRefById();
+if(o){if(o.onmouseover)o.onmouseover=null;if(OLscrollPI&&o==over)OLclearScroll();
+if(OLdraggablePI)OLclearDrag();if(OLfilterPI)OLcleanupFilter(o);if(OLshadowPI)OLhideShadow();
+var os=(OLns4)?o:o.style;if(((OLfilterPI)&&!OLchkFadeOut(os))||!OLfilterPI){
+os.visibility="hidden";if(!OLie55||!OLfilterPI||!o3_filter||o3_fadeout<0)o.innerHTML='';}
+if(OLhidePI&&o==over)OLhideUtil(0,0,1);if(OLiframePI)OLhideIfs(o);}
+}
+
+// Moves layer
+function OLrepositionTo(o,xL,yL){
+o=(OLns4)?o:o.style;o.left=(OLns4?xL:xL+'px');o.top=(OLns4?yL:yL+'px');
+}
+
+// Handle NOCLOSE-MOUSEOFF
+function OLoptMOUSEOFF(c){
+if(!c)o3_close="";
+over.onmouseover=function(){OLhover=1;if(OLtimerid>0){clearTimeout(OLtimerid);OLtimerid=0;}}
+}
+function OLcursorOff(){
+var o=(OLns4?over:over.style),pHt=OLns4?over.clip.height:over.offsetHeight,
+left=parseInt(o.left),top=parseInt(o.top),
+right=left+o3_width,bottom=top+((OLbubblePI&&o3_bubble)?OLbubbleHt:pHt);
+if(OLx<left||OLx>right||OLy<top||OLy>bottom)return true;return false;
+}
+
+/*
+ REGISTRATION
+*/
+function OLsetRunTimeVar(){
+if(OLrunTime.length)for(var k=0;k<OLrunTime.length;k++)OLrunTime[k]();
+}
+function OLparseCmdLine(pf,i,ar){
+if(OLcmdLine.length){for(var k=0;k<OLcmdLine.length;k++){
+var j=OLcmdLine[k](pf,i,ar);if(j>-1){i=j;break;}}}return i;
+}
+function OLregCmds(c){
+if(typeof c!='string')return;var pM=c.split(',');pMtr=pMtr.concat(pM);
+for(var i=0;i<pM.length;i++)eval(pM[i].toUpperCase()+'='+pmCnt++);
+}
+function OLregRunTimeFunc(f){
+if(typeof f=='object')OLrunTime=OLrunTime.concat(f);else OLrunTime[OLrunTime.length++]=f;
+}
+function OLregCmdLineFunc(f){
+if(typeof f=='object')OLcmdLine=OLcmdLine.concat(f);else OLcmdLine[OLcmdLine.length++]=f;
+}
+
+OLloaded=1;
diff --git a/src/extras/sos-html-logs/share/html/overlib/overlibmws_bubble.js b/src/extras/sos-html-logs/share/html/overlib/overlibmws_bubble.js new file mode 100644 index 00000000..94f1c796 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/overlibmws_bubble.js @@ -0,0 +1,199 @@ +/*
+ overlibmws_bubble.js plug-in module - Copyright Foteos Macrides 2003-2007. All rights reserved.
+ For support of the BUBBLE feature.
+ Initial: July 26, 2003 - Last Revised: January 1, 2007
+ See the Change History and Command Reference for overlibmws via:
+
+ http://www.macridesweb.com/oltest/
+
+ Published under an open source license: http://www.macridesweb.com/oltest/license.html
+*/
+
+OLloaded=0;
+var OLbubbleCmds='bubble,bubbletype,adjbubble';
+OLregCmds(OLbubbleCmds);
+
+// DEFAULT CONFIGURATION
+if(OLud('bubble'))var ol_bubble=0;
+if(OLud('bubbletype'))var ol_bubbletype='';
+if(OLud('adjbubble'))var ol_adjbubble=0;
+// END CONFIGURATION
+
+if(typeof OLbubbleImages=='undefined')
+var OLbubbleImages='flower,oval,square,pushpin,quotation,roundcorners';
+if(typeof OLbubbleImageDir=='undefined')var OLbubbleImageDir='./';
+OLregisterImages('flower,oval,square,pushpin,quotation,roundcorners',OLbubbleImageDir);
+var OLimgWidth=[250,330,144,202,200];
+var OLimgHeight=[150,160,190,221,66];
+var OLcontentWidth=[200,250,130,184,190];
+var OLcontentHeight=[80,85,150,176,46];
+var OLpadLeft=[30,40,7,9,5];
+var OLpadTop=[25,48,10,34,4];
+var OLarwTipX=[180,50,51,9,19];
+var OLarwTipY=[148,5,180,221,64];
+var OLbI,OLbContentWd=OLcontentWidth;
+
+var o3_bubble=0,o3_bubbletype='',o3_adjbubble=0,OLbubbleHt=0;
+
+function OLloadBubble(){
+OLload(OLbubbleCmds);OLbubbleHt=0;
+}
+
+function OLparseBubble(pf,i,ar){
+var k=i,t=OLtoggle;
+if(k<ar.length){
+if(Math.abs(ar[k])==BUBBLE){t(ar[k],pf+'bubble');return k;}
+if(ar[k]==BUBBLETYPE){OLparQuo(ar[++k],pf+'bubbletype');return k;}
+if(Math.abs(ar[k])==ADJBUBBLE){t(ar[k],pf+'adjbubble');return k;}}
+return -1;
+}
+
+function OLchkForBubbleEffect() {
+if(o3_bubble){o3_bubbletype=(o3_bubbletype)?o3_bubbletype:'flower';
+for(var i=0;i<OLbTypes.length;i++){if(OLbTypes[i]==o3_bubbletype){OLbI=i;break;}}
+// disable inappropriate parameters
+o3_bgcolor=o3_fgcolor='';
+o3_border=o3_base=0;
+o3_fgbackground=o3_bgbackground=o3_cgbackground=o3_background='';
+o3_cap='';
+if(o3_sticky)o3_noclose=1;
+o3_fullhtml=0;
+if(OLshadowPI)o3_shadow=0;
+if(o3_bubbletype!='roundcorners'){
+o3_width=OLbContentWd[OLbI];
+o3_hpos=RIGHT;
+o3_vpos=BELOW;
+o3_vauto=0;
+o3_hauto=0;
+o3_wrap=0;
+o3_nojusty=1;}}
+return true;
+}
+
+function OLregisterImages(imgStr,path) {
+if(typeof imgStr!='string')return;
+path=(path&&typeof path=='string')?path:'.';
+if(path.charAt(path.length-1)=='/')path=path.substring(0,path.length-1);
+if(typeof OLbTypes=='undefined')OLbTypes=imgStr.split(',');
+if(typeof OLbubbleImg=='undefined'){
+OLbubbleImg=new Array();
+for(var i=0;i<OLbTypes.length;i++){
+if(OLbubbleImages.indexOf(OLbTypes[i])<0)continue;
+if(OLbTypes[i]=='roundcorners'){
+OLbubbleImg[i]=new Array();
+var o=OLbubbleImg[i];
+o[0]=new Image();o[0].src=path+'/cornerTL.gif';
+o[1]=new Image();o[1].src=path+'/edgeT.gif';
+o[2]=new Image();o[2].src=path+'/cornerTR.gif';
+o[3]=new Image();o[3].src=path+'/edgeL.gif';
+o[4]=new Image();o[4].src=path+'/edgeR.gif';
+o[5]=new Image();o[5].src=path+'/cornerBL.gif';
+o[6]=new Image();o[6].src=path+'/edgeB.gif';
+o[7]=new Image();o[7].src=path+'/cornerBR.gif';
+}else{
+OLbubbleImg[i]=new Image();OLbubbleImg[i].src=path+'/'+OLbTypes[i]+'.gif';}}}
+}
+
+function OLgenerateBubble(content) {
+if(!o3_bubble)return;
+if(o3_bubbletype=='roundcorners')return OLdoRoundCorners(content);
+var ar,X,Y,fc=1.0,txt,sY,bHtDiff,bPadDiff=0,bLobj,bCobj;
+var bTopPad=OLpadTop,bLeftPad=OLpadLeft;
+var bContentHt=OLcontentHeight,bHt=OLimgHeight;
+var bWd=OLimgWidth,bArwTipX=OLarwTipX,bArwTipY=OLarwTipY;
+bHtDiff=fc*bContentHt[OLbI]-(OLns4?over.clip.height:over.offsetHeight);
+if(o3_adjbubble){
+fc=OLresizeBubble(bHtDiff,0.5,fc);
+ar=OLgetHeightDiff(fc);
+bHtDiff=ar[0];
+content=ar[1];}
+if(bHtDiff>0)bPadDiff=(bHtDiff<2)?0:parseInt(0.5*bHtDiff);
+Y=(bHtDiff<0)?fc*bTopPad[OLbI]:fc*bTopPad[OLbI]+bPadDiff;
+X=fc*bLeftPad[OLbI];
+Y=Math.round(Y);
+X=Math.round(X);
+o3_width=fc*bWd[OLbI];
+OLbubbleHt=fc*bHt[OLbI];
+txt='<img src="'+OLbubbleImg[OLbI].src+'" width="'+o3_width+'" height="'
++(bHtDiff<0?OLbubbleHt-bHtDiff:OLbubbleHt)+'" />'+(OLns4?'<div id="bContent">':
+'<div id="bContent" style="position:absolute; top:'+Y+'px; left:'+X+'px; width:'
++fc*OLbContentWd[OLbI]+'px; z-index:1;">')+content+'</div>';
+OLlayerWrite(txt);
+if(OLns4){
+bCobj=over.document.layers['bContent'];
+if(typeof bCobj=='undefined')return;
+bCobj.top=Y;
+bCobj.left=X;
+bCobj.clip.width=fc*OLbContentWd[OLbI];
+bCobj.zIndex=1;}
+if(fc*bArwTipY[OLbI]<0.5*fc*bHt[OLbI])sY=fc*bArwTipY[OLbI];
+else sY= -(fc*bHt[OLbI]+20);
+o3_offsetx -=fc*bArwTipX[OLbI];
+o3_offsety +=sY;
+}
+
+function OLdoRoundCorners(content) {
+var txt,wd,ht,o=OLbubbleImg[OLbI];
+wd=(OLns4)?over.clip.width:over.offsetWidth;
+ht=(OLns4)?over.clip.height:over.offsetHeight;
+txt='<table cellpadding="0" cellspacing="0" border="0">'
++'<tr><td align="right" valign="bottom"><img src="'+o[0].src+'" width="14" height="14"'
++(OLns6?' style="display:block;"':'')+' /></td><td valign="bottom"><img src="'+o[1].src
++'" height="14" width="'+wd+'"'+(OLns6?' style="display:block;"':'')
++' /></td><td align="left" valign="bottom"><img src="'+o[2].src+'" width="14" height="14"'
++(OLns6?' style="display:block;"':'')+' /></td></tr>'
++'<tr><td align="right"><img src="'+o[3].src+'" width="14" height="'+ht+'"'
++(OLns6?' style="display:block;"':'')+' /></td><td bgcolor="#ffffcc">'+content
++'</td><td align="left"><img src="'+o[4].src+'" width="14" height="'+ht+'"'
++(OLns6?' style="display:block;"':'')+ '/></td></tr>'+'<tr><td align="right" valign="top">'
++'<img src="'+o[5].src+'" width="14" height="14" /></td><td valign="top"><img src="'+o[6].src
++'" height="14" width="'+wd+'" /></td><td align="left" valign="top"><img src="'+o[7].src
++'" width="14" height="14" /></td></tr></table>';
+OLlayerWrite(txt);
+o3_width=wd+28;
+OLbubbleHt=ht+28;
+}
+
+function OLresizeBubble(h1,dF,fold){
+var df,h2,fnew,alpha,cnt=0;
+while(cnt<2){
+df= -OLsignOf(h1)*dF;
+fnew=fold+df;
+h2=OLgetHeightDiff(fnew)[0];
+if(Math.abs(h2)<11)break;
+if(OLsignOf(h1)!=OLsignOf(h2)){
+alpha=Math.abs(h1)/(Math.abs(h1)+Math.abs(h2));
+if(h1<0)fnew=alpha*fnew+(1.0-alpha)*fold;
+else fnew=(1.0-alpha)*fnew+alpha*fold;
+}else{
+alpha=Math.abs(h1)/(Math.abs(h2)-Math.abs(h1));
+if(h1<0)fnew=(1.0+alpha)*fold-alpha*fnew;
+else fnew=(1.0+alpha)*fnew-alpha*fold;}
+fold=fnew;
+h1=h2;
+dF*=0.5;
+cnt++;}
+return fnew;
+}
+
+function OLgetHeightDiff(f){
+var lyrhtml;
+o3_width=f*OLcontentWidth[OLbI];
+lyrhtml=OLcontentSimple(o3_text);
+OLlayerWrite(lyrhtml)
+return [f*OLcontentHeight[OLbI]-((OLns4)?over.clip.height:over.offsetHeight),lyrhtml];
+}
+
+function OLsignOf(x){
+return (x<0)? -1:1;
+}
+
+OLregRunTimeFunc(OLloadBubble);
+OLregCmdLineFunc(OLparseBubble);
+
+if(OLns4)
+document.write(
+'<style type="text/css">\n<!--\n#bContent{position:absolute;left:0px;top:0px;width:1024}\n'
++'-->\n<'+'\/style>');
+OLbubblePI=1;
+OLloaded=1;
diff --git a/src/extras/sos-html-logs/share/html/overlib/overlibmws_crossframe.js b/src/extras/sos-html-logs/share/html/overlib/overlibmws_crossframe.js new file mode 100644 index 00000000..beb468fa --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/overlibmws_crossframe.js @@ -0,0 +1,44 @@ +/*
+ overlibmws_crossframe.js plug-in module - Copyright Foteos Macrides 2003-2007. All rights reserved.
+ For support of FRAME.
+ Initial: August 3, 2003 - Last Revised: January 1, 2007
+ See the Change History and Command Reference for overlibmws via:
+
+ http://www.macridesweb.com/oltest/
+
+ Published under an open source license: http://www.macridesweb.com/oltest/license.html
+*/
+
+OLloaded=0;
+OLregCmds('frame');
+
+function OLparseCrossframe(pf,i,ar){
+var k=i,v;
+if(k<ar.length){
+if(ar[k]==FRAME){v=ar[++k];if(pf=='ol_')ol_frame=v;else OLoptFRAME(v);return k;}}
+return -1;
+}
+
+function OLgetFrameRef(thisFrame,ofrm){
+var i,v,retVal='';for(i=0;i<thisFrame.length;i++){if((((thisFrame[i].length>0)))&&(((OLns4))||
+((OLie4)&&(v=thisFrame[i].document.all.tags('iframe'))!=null&&v.length==0)||
+((OLns6)&&(v=thisFrame[i].document.getElementsByTagName('iframe'))!=null&&v.length==0))){
+retVal=OLgetFrameRef(thisFrame[i],ofrm);if(retVal=='')continue;}
+else if(thisFrame[i]!=ofrm)continue;retVal='['+i+']'+retVal;break;}
+return retVal;
+}
+
+function OLoptFRAME(frm){
+o3_frame=OLmkLyr('overDiv',frm)?frm:self;if(o3_frame!=self){
+var l,tFrm=OLgetFrameRef(top.frames,o3_frame),sFrm=OLgetFrameRef(top.frames,ol_frame);
+if(sFrm.length==tFrm.length) {l=tFrm.lastIndexOf('[');if(l){
+while(sFrm.substring(0,l)!=tFrm.substring(0,l))l=tFrm.lastIndexOf('[',l-1);
+tFrm=tFrm.substr(l);sFrm=sFrm.substr(l);}}var i,k,cnt=0,p='',str=tFrm;
+while((k=str.lastIndexOf('['))!= -1){cnt++;str=str.substring(0,k);}
+for(i=0;i<cnt;i++)p=p+'parent.';OLfnRef=p+'frames'+sFrm+'.';}
+}
+
+OLregCmdLineFunc(OLparseCrossframe);
+
+OLcrossframePI=1;
+OLloaded=1;
diff --git a/src/extras/sos-html-logs/share/html/overlib/overlibmws_debug.js b/src/extras/sos-html-logs/share/html/overlib/overlibmws_debug.js new file mode 100644 index 00000000..125b290d --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/overlibmws_debug.js @@ -0,0 +1,120 @@ +/*
+ overlibmws_debug.js plug-in module - Copyright Foteos Macrides 2003-2007. All rights reserved.
+ For support of the OLshowProperties() debugging function.
+ Initial: July 26, 2003 - Last Revised: January 1, 2007
+ See the Change History and Command Reference for overlibmws via:
+
+ http://www.macridesweb.com/oltest/
+
+ Published under an open source license: http://www.macridesweb.com/oltest/license.html
+*/
+
+OLloaded=0;
+var OLzIndex;
+OLregCmds('allowdebug');
+
+// DEFAULT CONFIGURATION
+if(OLud('allowdebug'))var ol_allowdebug='';
+// END CONFIGURATION
+
+var o3_allowdebug='';
+
+function OLloadDebug(){
+OLload('allowdebug');
+}
+
+function OLparseDebug(pf,i,ar){
+var k=i;
+if(ar[k]==ALLOWDEBUG){
+if(k<(ar.length-1)&&typeof ar[k+1]=='string')OLparQuo(ar[++k],pf+'allowdebug');return k;}
+return -1;
+}
+
+function OLshowProperties(){
+var ar=arguments,sho,shoS,vis,lvl=0,istrt=0,theDiv='showProps',txt='',
+fac='Verdana,Arial,Helvetica',siz=(OLns4?'1':'67%'),
+fon='><font color="#000000" face="'+fac+'" size="'+siz,
+stl=' style="font-family:'+fac+';font-size:'+siz+';',
+sty=stl+'color:#000000;',clo=(OLns4?'</font>':'');
+if(ar.length==0)return;
+if(ar.length%2&&typeof ar[0]=='string'){istrt=1;theDiv=ar[0];}
+if(!(sho=OLmkLyr(theDiv,self)))return;
+shoS=(OLns4)?sho:sho.style;
+lvl=OLgetLayerLevel(theDiv);
+if(typeof sho.position=='undefined'){
+sho.position=new OLpageLocDebug(10+lvl*20,10,1);
+if(typeof OLzIndex=='undefined')OLzIndex=OLgetDivZindex('overDiv',self);
+shoS.zIndex=OLzIndex+1+lvl;}
+txt='<table cellpadding="1" cellspacing="0" border="0" bgcolor="#000000"><tr><td>'
++'<table cellpadding="5" border="0" cellspacing="0" bgcolor="#ffffcc">'
++'<tr><td><strong><a href="javascript:OLmoveToBack(\''+theDiv+'\');" title="Move to back"'
++(OLns4?fon:stl)+'">'+theDiv+clo
++'</a></strong></td><td align="right"><strong><a href="javascript:OLcloseLayer(\''+theDiv
++'\');" title="Close Layer"'+(OLns4?fon:stl
++'background-color:#cccccc;border:1px #333369 outset;padding:0px;')+'">X'+clo
++'</a></strong></td></tr><tr><td'+(OLns4?fon:sty)+'">'+'<strong><em>Item</em></strong>'
++clo+'</td><td'+(OLns4?fon:sty)+'">'+'<strong><em>Value</em></strong>'+clo+'</td></tr>';
+for(var i=istrt;i<ar.length-1;i++)
+txt+='<tr><td align="right"'+(OLns4?fon:sty)+'">'+'<strong>'+ar[i]+': </strong>'
++clo+'</td><td'+(OLns4?fon:sty)+'">'+ar[++i]+clo+'</td></tr>';
+txt+='</table></td></tr></table>';
+if(OLns4){sho.document.open();sho.document.write(txt);sho.document.close();
+}else{if(OLie4&&OLieM)sho.innerHTML='';sho.innerHTML=txt;}
+OLshowAllVisibleLayers();
+}
+
+function OLgetLayerLevel(lyr){
+var i=0;
+if(typeof document.popups=='undefined'){document.popups=new Array(lyr);
+}else{var l=document.popups;for(i=0;i<l.length;i++)if(lyr==l[i])break;
+if(i==l.length)l[l.length++]=lyr;}
+return i;
+}
+
+function OLgetDivZindex(id,f){
+if(!id)id='overDiv';if(!f)f=o3_frame;
+var o=OLgetRefById(id,f.document);
+if(o){o=OLns4?o:o.style;return o.zIndex;}
+else return 1000;
+}
+
+function OLsetDebugCanShow(){
+if(o3_allowdebug!=''){
+var i,lyr,pLyr=o3_allowdebug.replace(/[ ]/ig,'').split(',');
+for(i=0;i<pLyr.length;i++){lyr=OLgetRefById(pLyr[i],self.document);
+if(lyr&&typeof lyr.position!='undefined')lyr.position.canShow=1;}}
+}
+
+function OLpageLocDebug(x,y,canShow){
+this.x=x;this.y=y;this.canShow=(canShow==null)?0:canShow;
+}
+
+function OLshowAllVisibleLayers(){
+var i,lyr,o,l=document.popups;
+for(i=0;i<l.length;i++){if((lyr=OLgetRefById(l[i],self.document))&&lyr.position.canShow){
+o=OLns4?lyr:lyr.style;OLpositionLayer(o,lyr.position.x,lyr.position.y);o.visibility='visible';}}
+}
+
+function OLpositionLayer(o,x,y){
+o.left=x+(OLie4?OLfd(self).scrollLeft:self.pageXOffset)+(OLns4?0:'px');
+o.top=y+(OLie4?OLfd(self).scrollTop:self.pageYOffset)+(OLns4?0:'px');
+}
+
+function OLcloseLayer(id){
+var lyr=OLgetRefById(id,self.document);
+if(lyr){lyr.position.canShow=0;lyr=OLns4?lyr:lyr.style;lyr.visibility='hidden';}
+}
+
+function OLmoveToBack(layer){
+var l=document.popups,lyr,o,i,x=10,dx=20,z=OLzIndex+1;if(l.length==1)return;
+if(lyr=OLgetRefById(layer,self.document)){lyr.position.x=x;o=OLns4?lyr:lyr.style;o.zIndex=z;
+for(i=0;i<l.length;i++){if(layer==l[i])continue;
+if(!(lyr=OLgetRefById(l[i],self.document))||lyr.position.canShow==0)continue;
+o=OLns4?lyr:lyr.style;o.zIndex+=1;lyr.position.x+=dx;}OLshowAllVisibleLayers();}
+}
+
+OLregRunTimeFunc(OLloadDebug);
+OLregCmdLineFunc(OLparseDebug);
+
+OLdebugPI=1;
+OLloaded=1;
diff --git a/src/extras/sos-html-logs/share/html/overlib/overlibmws_draggable.js b/src/extras/sos-html-logs/share/html/overlib/overlibmws_draggable.js new file mode 100644 index 00000000..a5696ab9 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/overlibmws_draggable.js @@ -0,0 +1,85 @@ +/*
+ overlibmws_draggable.js plug-in module - Copyright Foteos Macrides 2002-2007. All rights reserved.
+ For support of the DRAGGABLE feature.
+ Initial: August 24, 2002 - Last Revised: January 1, 2007
+ See the Change History and Command Reference for overlibmws via:
+
+ http://www.macridesweb.com/oltest/
+
+ Published under an open source license: http://www.macridesweb.com/oltest/license.html
+*/
+
+OLloaded=0;
+var OLdraggableCmds='draggable,dragcap,dragid';
+OLregCmds(OLdraggableCmds);
+
+// DEFAULT CONFIGURATION
+if(OLud('draggable'))var ol_draggable=0;
+if(OLud('dragcap'))var ol_dragcap=0;
+if(OLud('dragid'))var ol_dragid='';
+// END CONFIGURATION
+
+var o3_draggable=0,o3_dragcap=0,o3_dragid='',o3_dragging=0,OLdrg=null,OLmMv,
+OLcX,OLcY,OLcbX,OLcbY;function OLloadDraggable(){OLload(OLdraggableCmds);}
+function OLparseDraggable(pf,i,ar){var t=OLtoggle,k=i;if(k<ar.length){
+if(Math.abs(ar[k])==DRAGGABLE){t(ar[k],pf+'draggable');return k;}
+if(Math.abs(ar[k])==DRAGCAP){t(ar[k],pf+'dragcap');return k;}
+if(ar[k]==DRAGID){OLparQuo(ar[++k],pf+'dragid');return k;}}return -1;
+}
+
+function OLcheckDrag(){
+if(o3_draggable){if(o3_sticky&&(o3_frame==self))OLinitDrag();else o3_draggable=0;}
+}
+function OLinitDrag(){
+OLmMv=OLdw.onmousemove;o3_dragging=0;
+if(OLns4){document.captureEvents(Event.MOUSEDOWN|Event.CLICK);
+document.onmousedown=OLgrabEl;document.onclick=function(e){return routeEvent(e);}}
+else{var dvido=(o3_dragid)?OLgetRef(o3_dragid):null,capid=(OLovertwoPI&&over==over2?
+'overCap2':'overCap');if(dvido)dvido.onscroll=function(){OLdw.onmousemove=OLmMv;
+OLinitDrag();};OLdrg=(o3_cap&&o3_dragcap)?OLgetRef(capid):over;
+if(!OLdrg||!OLdrg.style)OLdrg=over;OLdrg.onmousedown=OLgrabEl;OLsetDrgCur(1);}
+}
+function OLsetDrgCur(d){if(!OLns4&&OLdrg)OLdrg.style.cursor=(d?'move':'auto');}
+
+function OLgrabEl(e){
+var e=(e||event);
+var cKy=(OLns4?e.modifiers&Event.ALT_MASK:(e.altKey||(OLop7&&e.ctrlKey)));o3_dragging=1;
+if(cKy){OLsetDrgCur(0);document.onmouseup=function(){OLsetDrgCur(1);o3_dragging=0;}
+return(OLns4?routeEvent(e):true);}
+OLx=(e.pageX||e.clientX+OLfd().scrollLeft);OLy=(e.pageY||e.clientY+OLfd().scrollTop);
+if(OLie4)over.onselectstart=function(){return false;}
+if(OLns4){OLcX=OLx;OLcY=OLy;document.captureEvents(Event.MOUSEUP)}else{
+OLcX=OLx-(OLns4?over.left:parseInt(over.style.left));
+OLcY=OLy-(OLns4?over.top:parseInt(over.style.top));
+if((OLshadowPI)&&bkdrop&&o3_shadow){OLcbX=OLx-(parseInt(bkdrop.style.left));
+OLcbY=OLy-(parseInt(bkdrop.style.top));}}OLdw.onmousemove=OLmoveEl;
+document.onmouseup=function(){
+if(OLie4)over.onselectstart=null;o3_dragging=0;OLdw.onmousemove=OLmMv;}
+return(OLns4?routeEvent(e):false);
+}
+
+function OLmoveEl(e){
+var e=(e||event);
+OLx=(e.pageX||e.clientX+OLfd().scrollLeft);OLy=(e.pageY||e.clientY+OLfd().scrollTop);
+if(o3_dragging){if(OLns4){over.moveBy(OLx-OLcX,OLy-OLcY);
+if(OLshadowPI&&bkdrop&&o3_shadow)bkdrop.moveBy(OLx-OLcX,OLy-OLcY);}
+else{OLrepositionTo(over,OLx-OLcX,OLy-OLcY);
+if((OLiframePI)&&OLie55&&OLifsP1)OLrepositionTo(OLifsP1,OLx-OLcX,OLy-OLcY);
+if((OLshadowPI)&&bkdrop&&o3_shadow){OLrepositionTo(bkdrop,OLx-OLcbX,OLy-OLcbY);
+if((OLiframePI)&&OLie55&&OLifsSh)OLrepositionTo(OLifsSh,OLx-OLcbX,OLy-OLcbY);}}
+if(OLhidePI)OLhideUtil(0,1,1,0,0,0);}if(OLns4){OLcX=OLx;OLcY=OLy;}
+return false;
+}
+
+function OLclearDrag(){
+if(OLns4){document.releaseEvents(Event.MOUSEDOWN|Event.MOUSEUP|Event.CLICK);
+document.onmousedown=document.onclick=null;}else{
+if(OLdrg)OLdrg.onmousedown=null;over.onmousedown=null;OLsetDrgCur(0);}
+document.onmouseup=null;o3_dragging=0;
+}
+
+OLregRunTimeFunc(OLloadDraggable);
+OLregCmdLineFunc(OLparseDraggable);
+
+OLdraggablePI=1;
+OLloaded=1;
diff --git a/src/extras/sos-html-logs/share/html/overlib/overlibmws_exclusive.js b/src/extras/sos-html-logs/share/html/overlib/overlibmws_exclusive.js new file mode 100644 index 00000000..8caf3959 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/overlibmws_exclusive.js @@ -0,0 +1,58 @@ +/*
+ overlibmws_exclusive.js plug-in module - Copyright Foteos Macrides 2003-2007. All rights reserved.
+ For support of the EXCLUSIVE feature.
+ Initial: November 7, 2003 - Last Revised: January 1, 2007
+ See the Change History and Command Reference for overlibmws via:
+
+ http://www.macridesweb.com/oltest/
+
+ Published under an open source license: http://www.macridesweb.com/oltest/license.html
+*/
+
+OLloaded=0;
+var OLexclusiveCmds='exclusive,exclusivestatus,exclusiveoverride';
+OLregCmds(OLexclusiveCmds);
+
+// DEFAULT CONFIGURATION
+if(OLud('exclusive'))var ol_exclusive=0;
+if(OLud('exclusivestatus'))var ol_exclusivestatus='Please act on or close the open popup.';
+if(OLud('exclusiveoverride'))var ol_exclusiveoverride=0;
+// END CONFIGURATION
+
+var o3_exclusive=0,o3_exclusivestatus='',o3_exclusiveoverride=0;
+
+function OLloadExclusive(){
+OLload(OLexclusiveCmds);
+}
+
+function OLparseExclusive(pf,i,ar){
+var k=i,t=OLtoggle;
+if(k<ar.length){
+if(Math.abs(ar[k])==EXCLUSIVE){t(ar[k],pf+'exclusive');return k;}
+if(ar[k]==EXCLUSIVESTATUS){OLparQuo(ar[++k],pf+'exclusivestatus');return k;}
+if(Math.abs(ar[k])==EXCLUSIVEOVERRIDE){t(ar[k],pf+'exclusiveoverride');return k;}}
+return -1;
+}
+
+function OLisExclusive(args){
+if((args!=null)&&OLhasOverRide(args))o3_exclusiveoverride=(ol_exclusiveoverride==0)?1:0;
+else o3_exclusiveoverride=ol_exclusiveoverride;
+var rtnVal=(o3_exclusive&&!o3_exclusiveoverride&&OLshowingsticky&&
+over==OLgetRefById('overDiv'));
+if(rtnVal)self.status=o3_exclusivestatus;
+return rtnVal;
+}
+
+function OLhasOverRide(args){
+var rtnFlag=0;
+for(var i=0;i<args.length;i++){
+if(typeof args[i]=='number'&&args[i]==EXCLUSIVEOVERRIDE){
+rtnFlag=1;break;}}
+return rtnFlag;
+}
+
+OLregRunTimeFunc(OLloadExclusive);
+OLregCmdLineFunc(OLparseExclusive);
+
+OLexclusivePI=1;
+OLloaded=1;
diff --git a/src/extras/sos-html-logs/share/html/overlib/overlibmws_filter.js b/src/extras/sos-html-logs/share/html/overlib/overlibmws_filter.js new file mode 100644 index 00000000..160151f8 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/overlibmws_filter.js @@ -0,0 +1,184 @@ +/*
+ overlibmws_filter.js plug-in module - Copyright Foteos Macrides 2003-2007. All rights reserved.
+ For support of the FILTER feature.
+ Initial: November 27, 2003 - Last Revised: January 1, 2007
+ See the Change History and Command Reference for overlibmws via:
+
+ http://www.macridesweb.com/oltest/
+
+ Published under an open source license: http://www.macridesweb.com/oltest/license.html
+*/
+
+OLloaded=0;
+var OLfilterCmds='filter,fadein,fadeout,fadetime,filteropacity,filtershadow,filtershadowcolor';
+OLregCmds(OLfilterCmds);
+
+// DEFAULT CONFIGURATION
+if(OLud('filter'))var ol_filter=0;
+if(OLud('fadein'))var ol_fadein=52;
+if(OLud('fadeout'))var ol_fadeout=52;
+if(OLud('fadetime'))var ol_fadetime=800;
+if(OLud('filteropacity'))var ol_filteropacity=100;
+if(OLud('filtershadow'))var ol_filtershadow=0;
+if(OLud('filtershadowcolor'))var ol_filtershadowcolor="#cccccc";
+// END CONFIGURATION
+
+var o3_filter=0,o3_fadein=52,o3_fadeout=52,o3_fadetime=800,o3_filteropacity=100,
+o3_filtershadow=0,o3_filtershadowcolor="#cccccc",OLfiIdx= -1,OLfInc=5,OLfTmInc=40,OLfOp=1,
+OLfiId=0,OLfoId=0,OLfOp2=1,OLfiId2=0,OLfoId2=0,OLfInc2=5,OLfTmInc2=40;
+
+function OLloadFilter(){
+OLload(OLfilterCmds);
+}
+
+function OLparseFilter(pf,i,ar){
+var k=i,p=OLpar;
+if(k<ar.length){
+if(Math.abs(ar[k])==FILTER){OLtoggle(ar[k],pf+'filter');return k;}
+if(ar[k]==FADEIN){p(ar[++k],pf+'fadein');return k;}
+if(ar[k]==FADEOUT){p(ar[++k],pf+'fadeout');return k;}
+if(ar[k]==FADETIME){p(ar[++k],pf+'fadetime');return k;}
+if(ar[k]==FILTEROPACITY){p(ar[++k],pf+'filteropacity');return k;}
+if(ar[k]==FILTERSHADOW){p(ar[++k],pf+'filtershadow');return k;}
+if(ar[k]==FILTERSHADOWCOLOR){OLparQuo(ar[++k],pf+'filtershadowcolor');return k;}}
+return -1;
+}
+
+function OLhasOp(){
+var op=0;if(OLns4||OLieM)return op;var os=over.style,u='undefined';if(os)op=
+(typeof os.opacity!=u||typeof os.MozOpacity!=u||typeof os.KhtmlOpacity!=u||OLie4&&!OLopr)?1:0;
+return(op);
+}
+
+function OLinitFilterLyr(o2){
+if(!OLie55){if(!OLhasOp()){o3_filter=0;return;}if(parent!=self)o3_fadeout=0;}
+if(OLie55){o3_fadein-=1;o3_fadeout-=1;OLfiIdx= -1;
+if(over.style.filter){var p,s,ob=over.filters[28];for(p=28;p<31;p++){
+over.filters[p].enabled=0;}for(s=0;s<28;s++){if(over.filters[s].status)over.filters[s].stop();
+over.filters[s].enabled=0;}ob.enabled=0;ob.opacity=ol_filteropacity;return;}}
+if(OLie55&&(!o3_filter||(OLshadowPI&&o3_shadow)))return;if(!OLie55){
+var b=(OLshadowPI)?OLgetRef('backdrop2'):null;if(o2){if(OLfiId2)clearTimeout(OLfiId2);
+if(OLfoId2)clearInterval(OLfoId2);OLfiId2=OLfoId2=0;if(b)b.style.visibility='hidden';
+over2.style.visibility='hidden';OLopOv(ol_filteropacity,2);
+if(o3_filter&&(o3_fadein||o3_fadeout)){OLfInc2=o3_filteropacity/20;
+OLfOp2=(o3_fadein?1:o3_filteropacity);OLfTmInc2=parseInt(o3_fadetime/20);}}else{
+if(OLfiId)clearTimeout(OLfiId);if(OLfoId)clearInterval(OLfoId);OLfiId=OLfoId=0;
+if(OLshadowPI&&bkdrop)bkdrop.style.visibility='hidden';over.style.visibility='hidden';
+OLopOv(ol_filteropacity);if(o3_filter&&(o3_fadein||o3_fadeout)){OLfInc=o3_filteropacity/20;
+OLfOp=(o3_fadein?1:o3_filteropacity);OLfTmInc=parseInt(o3_fadetime/20);}}return;}
+var d=" progid:DXImageTransform.Microsoft.";over.style.filter="revealTrans()"
++d+"Fade(Overlap=1.00 enabled=0)"+d+"Inset(enabled=0)"
++d+"Iris(irisstyle=PLUS,motion=in enabled=0)"+d+"Iris(irisstyle=PLUS,motion=out enabled=0)"
++d+"Iris(irisstyle=DIAMOND,motion=in enabled=0)"+d+"Iris(irisstyle=DIAMOND,motion=out enabled=0)"
++d+"Iris(irisstyle=CROSS,motion=in enabled=0)"+d+"Iris(irisstyle=CROSS,motion=out enabled=0)"
++d+"Iris(irisstyle=STAR,motion=in enabled=0)"+d+"Iris(irisstyle=STAR,motion=out enabled=0)"
++d+"RadialWipe(wipestyle=CLOCK enabled=0)"+d+"RadialWipe(wipestyle=WEDGE enabled=0)"
++d+"RadialWipe(wipestyle=RADIAL enabled=0)"+d+"Pixelate(MaxSquare=35,enabled=0)"
++d+"Slide(slidestyle=HIDE,Bands=25 enabled=0)"+d+"Slide(slidestyle=PUSH,Bands=25 enabled=0)"
++d+"Slide(slidestyle=SWAP,Bands=25 enabled=0)"+d+"Spiral(GridSizeX=16,GridSizeY=16 enabled=0)"
++d+"Stretch(stretchstyle=HIDE enabled=0)"+d+"Stretch(stretchstyle=PUSH enabled=0)"
++d+"Stretch(stretchstyle=SPIN enabled=0)"+d+"Wheel(spokes=16 enabled=0)"
++d+"GradientWipe(GradientSize=1.00,wipestyle=0,motion=forward enabled=0)"
++d+"GradientWipe(GradientSize=1.00,wipestyle=0,motion=reverse enabled=0)"
++d+"GradientWipe(GradientSize=1.00,wipestyle=1,motion=forward enabled=0)"
++d+"GradientWipe(GradientSize=1.00,wipestyle=1,motion=reverse enabled=0)"
++d+"Zigzag(GridSizeX=8,GridSizeY=8 enabled=0)"+d+"Alpha(enabled=0)"
++d+"Dropshadow(OffX=5,OffY=5,Positive=true,enabled=0)"
++d+"Shadow(strength=5,direction=135,enabled=0)";
+}
+
+function OLchkFilter(o,o2){
+if(!o3_filter||o!=over.style||(OLie55&&OLshadowPI&&o3_shadow))return false;
+if(!OLie55){var op=o3_filteropacity;if(op>0&&op<100){if(o2)OLopOv(op,2);else OLopOv(op);}
+if(o3_fadein||o3_fadeout){var p=(o3_fadein)?(o2?OLfOp2:OLfOp):o3_filteropacity;if(o2){
+OLopOv(p,2);if(o3_fadein&&!OLfiId2)OLfadeIn2();}else{OLopOv(p);
+if(o3_fadein&&!OLfiId)OLfadeIn();}}return false;}
+var fi=o3_fadein,fo=o3_fadeout,fp=1,ft=o3_fadetime/1000;if(fi<0||fi>51){fi=fo;fp=0;}
+if(fi==51)fi=parseInt(Math.random()*50);var at=fi>-1&&fi<24&&ft>0,af=fi>23&&fi<51&&ft>0;
+OLfiIdx=(af?fi-23:0);var p,s,e,ob,t=over.filters[OLfiIdx];
+for(p=28;p<31;p++){over.filters[p].enabled=0;}for(s=0;s<28;s++){
+if(over.filters[s].status)over.filters[s].stop();over.filters[s].enabled=0;}
+for(e=1;e<3;e++){if(o3_filtershadowcolor&&o3_filtershadow==e){
+ob=over.filters[28+e];ob.enabled=1;ob.color=o3_filtershadowcolor;}}
+if(o3_filteropacity>0&&o3_filteropacity<100){ob=over.filters[28];
+ob.enabled=1;ob.opacity=o3_filteropacity;}if(fp&&(at||af)){if(at)over.filters[0].transition=fi;
+t.duration=ft;t.apply();o.visibility='visible';t.play();return true;}
+return false;
+}
+
+function OLopOv(op,o2){
+var o=(o2?over2:over),os=o.style;
+if(OLie4&&typeof os.filter=='string')os.filter='Alpha(opacity='+op+')';
+else if(typeof os.opacity!='undefined')os.opacity=op/100;
+else if(typeof os.MozOpacity!='undefined')os.MozOpacity=op/100;
+else if(typeof os.KhtmlOpacity!='undefined')os.KhtmlOpacity=op/100;
+}
+
+function OLopOvSh(op,o){
+if(!bkdrop&&!o)return;var os=(o)?o.style:bkdrop.style;
+if(OLie4&&typeof os.filter=='string')os.filter='Alpha(opacity='+op+')';
+else if(typeof os.opacity!='undefined')os.opacity=op/100;
+else if(typeof os.MozOpacity!='undefined')os.MozOpacity=op/100;
+else if(typeof os.KhtmlOpacity!='undefined')os.KhtmlOpacity=op/100;
+}
+
+function OLcleanupFilter(o,o2){
+if(!o3_filter||!over||o!=over||(OLie55&&OLshadowPI&&o3_shadow))return;if(!OLie55){
+if(o2){if(OLfiId2)clearTimeout(OLfiId2);if(OLfoId2)clearInterval(OLfoId2);
+OLfiId2=OLfoId2=0;var op=o3_filteropacity;if(op>0&&op<100)OLopOv(ol_filteropacity,2);}else{
+if(OLfiId)clearTimeout(OLfiId);if(OLfoId)clearInterval(OLfoId);OLfiId=OLfoId=0;
+var op=o3_filteropacity;if(op>0&&op<100)OLopOv(ol_filteropacity);}return;}
+if(typeof over.filters!='object')return;
+var os=over.style,fi=o3_fadein,fo=o3_fadeout;
+if(fi>=0&&fi<=51&&fo==fi){if(OLfiIdx<0)return;var t=over.filters[OLfiIdx];
+if(t.status)t.stop();os.visibility='visible';t.apply();
+os.visibility='hidden';t.play();
+}else{if(fo>=0&&fo<=51){fi=fo;if(fi==51)fi=parseInt(Math.random()*50);
+var ft=o3_fadetime;var at=fi>-1&&fi<24&&ft>0; var af=fi>23&&fi<51&&ft>0;
+OLfiIdx=(af?fi-23:0);t=over.filters[OLfiIdx];if(at||af){
+if(at)over.filters[0].transition=fi;if(t.status)t.stop();
+os.visibility='visible';t.apply();os.visibility='hidden';t.play();}}}
+OLfiIdx=-1;
+}
+
+function OLfadeIn(){
+if(OLfOp>=o3_filteropacity){if(OLshadowPI&&o3_shadow&&bkdrop)OLopOvSh(o3_shadowopacity);
+OLopOv(o3_filteropacity);clearTimeout(OLfiId);OLfiId=0;}else{OLopOv(OLfOp);
+if(!OLfOp&&over.style.visibility=='hidden')over.style.visibility='visible';var ops=0.3*OLfOp;
+if(OLfOp>40&&OLshadowPI&&o3_shadow&&bkdrop&&ops<o3_shadowopacity)OLopOvSh(ops);OLfOp+=OLfInc;
+OLfiId=setTimeout("OLfadeIn()",OLfTmInc);}
+}
+function OLfadeIn2(){
+if(OLfOp2>=o3_filteropacity){if(OLshadowPI&&o3_shadow&&bkdrop)OLopOvSh(o3_shadowopacity);
+OLopOv(o3_filteropacity,2);clearTimeout(OLfiId2);OLfiId2=0;}else{OLopOv(OLfOp2,2);
+if(!OLfOp2&&over2&&over2.style.visibility=='hidden')over2.style.visibility='visible';
+var ops=0.3*OLfOp2;if(OLfOp2>40&&OLshadowPI&&o3_shadow&&bkdrop&&ops<o3_shadowopacity)
+OLopOvSh(ops);OLfOp2+=OLfInc2;OLfiId2=setTimeout("OLfadeIn2()",OLfTmInc2);}
+}
+
+function OLchkFadeOut(o){
+if(OLie55||!o3_filter||!o3_fadeout||o!=over.style)return false;
+OLfoId=setInterval('OLfadeOut()',OLfTmInc);return true;
+}
+function OLfadeOut(){
+if(OLfOp<0){clearInterval(OLfoId);OLfoId=0;o3_fadeout=0;if(OLshadowPI&&o3_shadow&&bkdrop){
+bkdrop.style.visibility="hidden";OLcleanUpShadow();}OLhideObject(over);}else{var ops=0.3*OLfOp;
+if(OLfOp>40&&OLshadowPI&&o3_shadow&&bkdrop&&ops<o3_shadowopacity)OLopOvSh(ops);OLopOv(OLfOp);
+OLfOp-=OLfInc;}
+}
+function OLchkFadeOut2(o){
+if(OLie55||!o3_filter||!o3_fadeout||o!=over.style)return false;
+OLfoId2=setInterval('OLfadeOut2()',OLfTmInc2);return true;
+}
+function OLfadeOut2(){
+var b=(OLshadowPI)?OLgetRef('backdrop2'):null;if(OLfOp2<0){clearInterval(OLfoId2);if(b){
+b.style.visibility="hidden";if(over==over2)OLcleanUpShadow();}OLfoId2=0;OLhideObjectP2(over);
+over2.style.visibility='hidden';}else{var ops=0.3*OLfOp2;if(b){if(OLfOp2>40)OLopOvSh(ops,b);
+else OLopOvSh(1,b);}OLopOv(OLfOp2,2);OLfOp2-=OLfInc2;}
+}
+
+OLregRunTimeFunc(OLloadFilter);
+OLregCmdLineFunc(OLparseFilter);
+
+OLfilterPI=1;
+OLloaded=1;
diff --git a/src/extras/sos-html-logs/share/html/overlib/overlibmws_function.js b/src/extras/sos-html-logs/share/html/overlib/overlibmws_function.js new file mode 100644 index 00000000..3de9ea0b --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/overlibmws_function.js @@ -0,0 +1,44 @@ +/*
+ overlibmws_function.js plug-in module - Copyright Foteos Macrides 2002-2007. All rights reserved.
+ For support of the FUNCTION feature.
+ Initial: August 18, 2002 - Last Revised: January 1, 2007
+ See the Change History and Command Reference for overlibmws via:
+
+ http://www.macridesweb.com/oltest/
+
+ Published under an open source license: http://www.macridesweb.com/oltest/license.html
+*/
+
+OLloaded=0;
+OLregCmds('function');
+
+// DEFAULT CONFIGURATION
+if(OLud('function'))var ol_function=null;
+// END CONFIGURATION
+
+var o3_function=null;
+
+function OLloadFunction(){
+OLload('function');
+}
+
+function OLparseFunction(pf,i,ar){
+var k=i,v=null;
+if(k<ar.length){
+if(ar[k]==FUNCTION){if(pf=='ol_'){if(typeof ar[k+1]!='number'){v=ar[++k];
+ol_function=(typeof v=='function'?v:null);}}
+else{OLudf=0;v=null;if(typeof ar[k+1]!='number')v=ar[++k];OLoptFUNCTION(v);}return k;}}
+return -1;
+}
+
+function OLoptFUNCTION(callme){
+o3_text=(callme?(typeof callme=='string'?(/.+\(.*\)/.test(callme)?eval(callme):
+callme):callme()):(o3_function?o3_function():'No Function'));
+return 0;
+}
+
+OLregRunTimeFunc(OLloadFunction);
+OLregCmdLineFunc(OLparseFunction);
+
+OLfunctionPI=1;
+OLloaded=1;
diff --git a/src/extras/sos-html-logs/share/html/overlib/overlibmws_hide.js b/src/extras/sos-html-logs/share/html/overlib/overlibmws_hide.js new file mode 100644 index 00000000..08b9a0b4 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/overlibmws_hide.js @@ -0,0 +1,81 @@ +/*
+ overlibmws_hide.js plug-in module - Copyright Foteos Macrides 2003-2007. All rights reserved.
+ For hiding elements.
+ Initial: November 13, 2003 - Last Revised: March 10, 2007
+ See the Change History and Command Reference for overlibmws via:
+
+ http://www.macridesweb.com/oltest/
+
+ Published under an open source license: http://www.macridesweb.com/oltest/license.html
+*/
+
+OLloaded=0;
+var OLhideCmds='hideselectboxes,hidebyid,hidebyidall,hidebyidns4';
+OLregCmds(OLhideCmds);
+
+// DEFAULT CONFIGURATION
+if(OLud('hideselectboxes'))var ol_hideselectboxes=0;
+if(OLud('hidebyid'))var ol_hidebyid='';
+if(OLud('hidebyidall'))var ol_hidebyidall='';
+if(OLud('hidebyidns4'))var ol_hidebyidns4='';
+// END CONFIGURATION
+
+var o3_hideselectboxes=0,o3_hidebyid='',o3_hidebyidall='',o3_hidebyidns4='',
+OLselectOK=(OLie7||OLop7||OLgek>=20030624)?1:0;
+
+function OLloadHide(){
+OLload(OLhideCmds);
+}
+
+function OLparseHide(pf,i,ar){
+var k=i,q=OLparQuo;
+if(k<ar.length){
+if(Math.abs(ar[k])==HIDESELECTBOXES){OLtoggle(ar[k],pf+'hideselectboxes');return k;}
+if(ar[k]==HIDEBYID){q(ar[++k],pf+'hidebyid');return k;}
+if(ar[k]==HIDEBYIDALL){q(ar[++k],pf+'hidebyidall');return k;}
+if(ar[k]==HIDEBYIDNS4){q(ar[++k],pf+'hidebyidns4');return k;}}
+return -1;
+}
+
+function OLchkHide(hide){
+if(OLiframePI&&OLie55)return;if(OLmodalPI&&o3_modal)o3_hideselectboxes=0;var id,o,i;
+if(o3_hidebyid&&typeof o3_hidebyid=='string'&&!(o3_hideselectboxes&&OLns6)&&!OLop7&&!OLns4){
+id=o3_hidebyid.replace(/[ ]/ig,'').split(',');for(i=0;i<id.length;i++){
+o=(OLie4?o3_frame.document.all[id[i]]:OLns6?o3_frame.document.getElementById(id[i]):null);
+if(o)o.style.visibility=(hide?'hidden':'visible');}}
+if(o3_hidebyidall&&typeof o3_hidebyidall=='string'){
+id=o3_hidebyidall.replace(/[ ]/ig,'').split(',');for(i=0;i<id.length;i++){
+o=OLgetRefById(id[i]);if(o){o=(OLns4)?o:o.style;
+o.visibility=(hide?'hidden':'visible');}}}
+if(o3_hidebyidns4&&OLns4&&typeof o3_hidebyidns4=='string'){
+id=o3_hidebyidns4.replace(/[ ]/ig,'').split(',');for(i=0;i<id.length;i++){
+o=eval('o3_frame.document.'+id[i]);if(o)o.visibility=(hide?'hidden':'visible');}}
+}
+
+function OLselectBoxes(hide,all){
+if((OLiframePI&&OLie55)||OLselectOK||OLns4)return;var sel=OLie4?
+o3_frame.document.all.tags('select'):o3_frame.document.getElementsByTagName('select'),
+px=over.offsetLeft,py=over.offsetTop,pw=over.offsetWidth,ph=over.offsetHeight,bx=px,by=py,
+bw=pw,bh=ph,sx,sy,sw,sh,i,sp,si;if((OLshadowPI)&&bkdrop&&o3_shadow){bx=bkdrop.offsetLeft;
+by=bkdrop.offsetTop;bw=bkdrop.offsetWidth;bh=bkdrop.offsetHeight;}for(i=0;i<sel.length;i++){
+sx=0;sy=0;si=0;if(sel[i].offsetParent){sp=sel[i];while(sp.offsetParent&&
+sp.offsetParent.tagName.toLowerCase()!='body'){if(sp.offsetParent.id=='overDiv'||
+sp.offsetParent.id=='overDiv2')si=1;sp=sp.offsetParent;sx+=sp.offsetLeft;sy+=sp.offsetTop;}
+sx+=sel[i].offsetLeft;sy+=sel[i].offsetTop;sw=sel[i].offsetWidth;sh=sel[i].offsetHeight;
+if(si||(!OLie4&&sel[i].size<2))continue;else if(hide){if((px+pw>sx&&px<sx+sw&&py+ph>sy&&
+py<sy+sh)||(bx+bw>sx&&bx<sx+sw&&by+bh>sy&&by<sy+sh)){if(sel[i].style.visibility!="hidden")
+sel[i].style.visibility="hidden";}}else{if(all||(!(OLovertwoPI&&over==over2)&&(px+pw<sx||
+px>sx+sw||py+ph<sy||py>sy+sh)&&(bx+bw<sx||bx>sx+sw||by+bh<sy||by>sy+sh))){
+if(sel[i].style.visibility!="visible")sel[i].style.visibility="visible";}}}}
+}
+
+function OLhideUtil(a1,a2,a3,a4,a5,a6){
+if(a4==null){OLchkHide(a1);if(o3_hideselectboxes)OLselectBoxes(a2,a3);}else{OLchkHide(a1);
+OLchkHide(a2);if(o3_hideselectboxes){OLselectBoxes(a3,a4);OLselectBoxes(a5,a6);}}
+}
+
+OLregRunTimeFunc(OLloadHide);
+OLregCmdLineFunc(OLparseHide);
+
+OLhidePI=1;
+OLloaded=1;
diff --git a/src/extras/sos-html-logs/share/html/overlib/overlibmws_iframe.js b/src/extras/sos-html-logs/share/html/overlib/overlibmws_iframe.js new file mode 100644 index 00000000..06a59114 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/overlibmws_iframe.js @@ -0,0 +1,93 @@ +/*
+ overlibmws_iframe.js plug-in module - Copyright Foteos Macrides 2003-2007. All rights reserved.
+ Masks system controls to prevent obscuring of popops for IE v5.5 or higher.
+ Initial: October 19, 2003 - Last Revised: April 22, 2007
+ See the Change History and Command Reference for overlibmws via:
+
+ http://www.macridesweb.com/oltest/
+
+ Published under an open source license: http://www.macridesweb.com/oltest/license.html
+*/
+
+OLloaded=0;
+
+var OLifsP1=null,OLifsSh=null,OLifsP2=null;
+
+// IFRAME SHIM SUPPORT FUNCTIONS
+function OLinitIfs(){
+if(!OLie55)return;
+if((OLovertwoPI)&&over2&&over==over2){
+var o=o3_frame.document.all['overIframeOvertwo'];
+if(!o||OLifsP2!=o){OLifsP2=null;OLgetIfsP2Ref();}return;}
+o=o3_frame.document.all['overIframe'];
+if(!o||OLifsP1!=o){OLifsP1=null;OLgetIfsRef();}
+if((OLshadowPI)&&o3_shadow){o=o3_frame.document.all['overIframeShadow'];
+if(!o||OLifsSh!=o){OLifsSh=null;OLgetIfsShRef();}}
+}
+
+function OLsetIfsRef(o,i,z){
+o.id=i;o.src='javascript:false;';o.scrolling='no';var os=o.style;os.position='absolute';
+os.top='0px';os.left='0px';os.width='1px';os.height='1px';os.visibility='hidden';
+os.zIndex=over.style.zIndex-z;os.filter='Alpha(style=0,opacity=0)';
+}
+
+function OLgetIfsRef(){
+if(OLifsP1||!OLie55)return;
+OLifsP1=o3_frame.document.createElement('iframe');
+OLsetIfsRef(OLifsP1,'overIframe',2);
+o3_frame.document.body.appendChild(OLifsP1);
+}
+
+function OLgetIfsShRef(){
+if(OLifsSh||!OLie55)return;
+OLifsSh=o3_frame.document.createElement('iframe');
+OLsetIfsRef(OLifsSh,'overIframeShadow',3);
+o3_frame.document.body.appendChild(OLifsSh);
+}
+
+function OLgetIfsP2Ref(){
+if(OLifsP2||!OLie55)return;
+OLifsP2=o3_frame.document.createElement('iframe');
+OLsetIfsRef(OLifsP2,'overIframeOvertwo',1);
+o3_frame.document.body.appendChild(OLifsP2);
+}
+
+function OLsetDispIfs(o,w,h){
+var os=o.style;
+os.width=w+'px';os.height=h+'px';os.clip='rect(0px '+w+'px '+h+'px 0px)';
+o.filters.alpha.enabled=true;
+}
+
+function OLdispIfs(){
+if(!OLie55)return;
+var wd=over.offsetWidth,ht=over.offsetHeight;
+if(OLfilterPI&&o3_filter&&o3_filtershadow){wd+=5;ht+=5;}
+if((OLovertwoPI)&&over2&&over==over2){
+if(!OLifsP2)return;
+OLsetDispIfs(OLifsP2,wd,ht);return;}
+if(!OLifsP1)return;
+OLsetDispIfs(OLifsP1,wd,ht);
+if((!OLshadowPI)||!o3_shadow||!OLifsSh)return;
+OLsetDispIfs(OLifsSh,wd,ht);
+}
+
+function OLshowIfs(){
+if(OLifsP1){OLifsP1.style.visibility="visible";
+if((OLshadowPI)&&o3_shadow&&OLifsSh)OLifsSh.style.visibility="visible";}
+}
+
+function OLhideIfs(o){
+if(!OLie55||o!=over)return;
+if(OLifsP1)OLifsP1.style.visibility="hidden";
+if((OLshadowPI)&&o3_shadow&&OLifsSh)OLifsSh.style.visibility="hidden";
+}
+
+function OLrepositionIfs(X,Y){
+if(OLie55){if((OLovertwoPI)&&over2&&over==over2){
+if(OLifsP2)OLrepositionTo(OLifsP2,X,Y);}
+else{if(OLifsP1){OLrepositionTo(OLifsP1,X,Y);if((OLshadowPI)&&o3_shadow&&OLifsSh)
+OLrepositionTo(OLifsSh,X+o3_shadowx,Y+o3_shadowy);}}}
+}
+
+OLiframePI=1;
+OLloaded=1;
diff --git a/src/extras/sos-html-logs/share/html/overlib/overlibmws_modal.js b/src/extras/sos-html-logs/share/html/overlib/overlibmws_modal.js new file mode 100644 index 00000000..394c3dac --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/overlibmws_modal.js @@ -0,0 +1,149 @@ +/*
+ overlibmws_modal.js plug-in module - Copyright Foteos Macrides 2006-2007. All rights reserved.
+ For support of the MODAL feature.
+ Initial: November 15, 2006 - Last Revised: September 22, 2007
+ See the Change History and Command Reference for overlibmws via:
+
+ http://www.macridesweb.com/oltest/
+
+ Published under an open source license: http://www.macridesweb.com/oltest/license.html
+*/
+
+OLloaded=0;var OLmodalCmds='modal,modalcolor,modalopacity';OLregCmds(OLmodalCmds);
+
+// DEFAULT CONFIGURATION
+if(OLud('modal'))var ol_modal=0;
+if(OLud('modalcolor'))var ol_modalcolor="#bbbbbb";
+if(OLud('modalopacity'))var ol_modalopacity=40;
+// END CONFIGURATION
+
+var o3_modal=0,o3_modalcolor="#bbbbbb",o3_modalopacity=40;
+
+function OLloadModal(){
+OLload(OLmodalCmds);
+}
+
+function OLparseModal(pf,i,ar){
+var k=i;if(k<ar.length){
+if(Math.abs(ar[k])==MODAL){OLtoggle(ar[k],pf+'modal');return k;}
+if(ar[k]==MODALCOLOR){OLparQuo(ar[++k],pf+'modalcolor');return k;}
+if(ar[k]==MODALOPACITY){OLpar(ar[++k],pf+'modalopacity');return k;}}
+return -1;
+}
+
+var OLmMask=null,OLmIframe=null,OLmMaskOn=0,OLmSelectOK=(OLie55||OLop7||OLgek>=20030624)?1:0,
+OLmRoot='html',OLmGotSc=0,OLmScLeft=0,OLmScTop=0,OLmKDH=null,OLmTI=new Array(),
+OLmTT=new Array("a","button","iframe","input","select","textarea"),OLmEdit=0;
+
+function OLchkModal(){
+if(o3_modal){if(o3_sticky&&!OLns4)OLmInitMask();else o3_modal=0;}
+}
+function OLclearModal(){
+if(OLmMaskOn)OLmHideMask();
+}
+
+function OLsetModalIframe(o,i,z){
+o.id=i;o.src='javascript:false;';o.scrolling='no';var os=o.style;
+os.position='absolute';os.zIndex=z;os.filter='Alpha(style=0,opacity=0)';
+}
+
+function OLmInitMask(){
+OLmRoot=(o3_frame.document.compatMode&&o3_frame.document.compatMode=='BackCompat')?'body':'html';
+var doCss=(!OLgetRef('modalMask'))?1:0,zI=(over)?over.style.zIndex-2:998;OLmMask=OLmkLyr('modalMask',o3_frame);
+OLmMask.style.zIndex=zI;if(OLie55){if(!OLgetRef('modalIframe')){OLmIframe=o3_frame.document.createElement('iframe');
+OLsetModalIframe(OLmIframe,'modalIframe',(zI-1));o3_frame.document.body.appendChild(OLmIframe);}
+else OLmIframe.style.zIndex=(zI-1);}var o=OLmMask.style,op=o3_modalopacity;op=(op<=100&&op>0?op:100);
+o.backgroundColor=o3_modalcolor;if(doCss){o.display='none';o.top='0px';o.left='0px';o.width='100%';o.height='100%';
+o.visibility='visible';if(OLie55){var oi=o3_frame.document.all['modalIframe'].style;oi.display='none';oi.top='0px';
+oi.left='0px';oi.width='100%';oi.height='100%';oi.visibility='visible';}}if(OLie4&&!OLieM&&typeof o.filter=='string'){
+o.filter='Alpha(opacity='+op+')';if(OLie55)OLmMask.filters.alpha.enabled=1;}else{op=op/100;if(typeof o.opacity!='undefined')
+o.opacity=op;else if(typeof o.MozOpacity!='undefined')o.MozOpacity=op;else if(typeof o.KhtmlOpacity!='undefined')
+o.KhtmlOpacity=op;}OLmAddEv(window,"resize",OLmHandleMask);OLmShowMask();
+}
+function OLmShowMask(){
+OLmMaskOn=1;if(!OLie4||OLop7){OLmKDH=document.onkeypress?document.onkeypress.toString():null;
+document.onkeypress=OLmKeyDownHandler;}else OLmDisableTI();OLmMask.style.display="block";
+if(OLie55)OLmIframe.style.display="block";OLmHandleMask();OLmSetMaskSize();
+if(!OLmSelectOK)OLmHideSB();
+}
+function OLmHandleMask(){
+if(OLmMaskOn){if(!OLmGotSc){OLmScLeft=parseInt((OLie4&&!OLop7?OLfd(o3_frame).scrollLeft:
+o3_frame.pageXOffset),10);OLmScTop=parseInt((OLie4&&!OLop7?OLfd(o3_frame).scrollTop:
+o3_frame.pageYOffset),10);OLmGotSc=1;}
+var root=o3_frame.document.getElementsByTagName(OLmRoot)[0];if(root.style.overflow!=
+'hidden')root.style.overflow='hidden';var scLeft=parseInt((OLie4&&!OLop7?
+OLfd(o3_frame).scrollLeft:o3_frame.pageXOffset),10),scTop=parseInt((OLie4&&!OLop7?
+OLfd(o3_frame).scrollTop:o3_frame.pageYOffset),10),o=OLmMask.style,oi=(OLie55&&OLmIframe)?
+OLmIframe.style:null;o.top=scTop+"px";o.left=scLeft+"px";o.top=scTop+"px";o.left=scLeft+"px";
+if(oi){oi.top=scTop+"px";oi.left=scLeft+"px";oi.top=scTop+"px";oi.left=scLeft+"px";}
+OLmSetMaskSize();}
+}
+function OLmSetMaskSize(){
+var root=o3_frame.document.getElementsByTagName(OLmRoot)[0],mHt,fullWd=OLmViewportWd(),
+fullHt=OLmViewportHt();if(fullHt>root.scrollHeight)mHt=fullHt;else mHt=root.scrollHeight;
+OLmMask.style.height=mHt+'px';OLmMask.style.width=root.scrollWidth+'px';if(OLie55&&OLmIframe){
+OLmIframe.style.height=mHt+'px';OLmIframe.style.width=root.scrollWidth+'px';}
+}
+function OLmHideMask(){
+OLmMaskOn=0;var root=o3_frame.document.getElementsByTagName(OLmRoot)[0];root.style.overflow=
+(OLop7?'auto':'');if(!OLie4||OLop7){document.onkeypress=OLmKDH;OLmKDH=null;}else OLmRestoreTI();
+if(!OLmSelectOK)OLmShowSB();OLmRemoveEv(window,"resize",OLmHandleMask);
+if(o3_frame.scrollTo&&OLmGotSc){o3_frame.scrollTo(OLmScLeft,OLmScTop);OLmGotSc=0;}
+if(OLgetRef('modalMask')&&OLmMask){OLmMask.style.display='none';if(OLie55)
+OLmIframe.style.display='none';}OLmEdit=0;
+}
+
+function OLmKeyDownHandler(e){
+var ev=(e||event),k=ev.keyCode,c=ev.charCode;
+if(OLmMaskOn&&!OLmEdit&&(k==9||c==32||(OLgek&&k==13)||(k>=32&&k<=40)))return false;
+}
+
+function OLmAddEv(obj,evType,fn){
+if(obj.addEventListener){obj.addEventListener(evType,fn,false);return true;}
+else if(obj.attachEvent){var r=obj.attachEvent("on"+evType,fn);return r;}else return false;
+}
+function OLmRemoveEv(obj,evType,fn){
+if(obj.removeEventListener){obj.removeEventListener(evType,fn,false);return true;}
+else if(obj.detachEvent){var r=obj.detachEvent("on"+evType,fn);return r;}else return false;
+}
+
+function OLmViewportWd(){
+if(o3_frame.innerWidth!=o3_frame.undefined){return o3_frame.innerWidth;}
+if(o3_frame.document.compatMode=='CSS1Compat'){
+return o3_frame.document.documentElement.clientWidth;}
+if(o3_frame.document.body)return o3_frame.document.body.clientWidth;return o3_frame.undefined;
+}
+function OLmViewportHt(){
+if(o3_frame.innerHeight!=o3_frame.undefined)return o3_frame.innerHeight;
+if(o3_frame.document.compatMode=='CSS1Compat')
+return o3_frame.document.documentElement.clientHeight;
+if(o3_frame.document.body)return o3_frame.document.body.clientHeight;return o3_frame.undefined;
+}
+
+function OLmHideSB(){
+var s=over.innerHTML;over.innerHTML='';var sel=OLie4?o3_frame.document.all.tags('select'):
+o3_frame.document.getElementsByTagName('select');for(i=0;i<sel.length;i++)
+sel[i].style.visibility="hidden";over.innerHTML=s;
+}
+function OLmShowSB(){
+var s=over.innerHTML;over.innerHTML='';var sel=OLie4?o3_frame.document.all.tags('select'):
+o3_frame.document.getElementsByTagName('select');for(i=0;i<sel.length;i++)
+sel[i].style.visibility="visible";over.innerHTML=s;
+}
+
+function OLmDisableTI(){
+if(OLie4&&!OLop7){var i=0;for(var j=0;j<OLmTT.length;j++){
+var tagE=o3_frame.document.getElementsByTagName(OLmTT[j]);for(var k=0;k<tagE.length; k++){
+OLmTI[i]=tagE[k].tabIndex;tagE[k].tabIndex="-1";i++;}}}
+}
+function OLmRestoreTI(){
+if(OLie4&&!OLop7){var i=0;for(var j=0;j<OLmTT.length;j++){
+var tagE=o3_frame.document.getElementsByTagName(OLmTT[j]);for(var k=0;k<tagE.length;k++){
+tagE[k].tabIndex=OLmTI[i];tagE[k].tabEnabled=true;i++;}}}
+}
+
+OLregRunTimeFunc(OLloadModal);
+OLregCmdLineFunc(OLparseModal);
+
+OLmodalPI=1;
+OLloaded=1;
diff --git a/src/extras/sos-html-logs/share/html/overlib/overlibmws_overtwo.js b/src/extras/sos-html-logs/share/html/overlib/overlibmws_overtwo.js new file mode 100644 index 00000000..72ba9dfc --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/overlibmws_overtwo.js @@ -0,0 +1,129 @@ +/*
+ overlibmws_overtwo.js plug-in module - Copyright Foteos Macrides 2003-2007. All rights reserved.
+ For support of the popups-within-a-popup feature.
+ Initial: July 14, 2003 - Last Revised: July 7, 2007
+ See the Change History and Command Reference for overlibmws via:
+
+ http://www.macridesweb.com/oltest/
+
+ Published under an open source license: http://www.macridesweb.com/oltest/license.html
+*/
+
+OLloaded=0;
+OLregCmds('label2');
+
+// DEFAULT CONFIGURATION
+if(OLud('label2'))var ol_label2="";
+// END CONFIGURATION
+
+var o3_label2="",OLshowingsticky2=0,over2=null,OLp1over=null,bkdrop2=null,OLp1bkdrop=null,
+OLp1scroll=0,OLp1X=0,OLp1Y=0,OLp1If=null,OLp1IfShadow=null,OLp1bubbleHt=0,OLp1exclusive=0,
+OLp1modal=0,OLp1fiIdx= -1,OLp1Hover=0;
+
+function OLloadOvertwo(){
+OLload('label2');
+}
+
+function OLparseOvertwo(pf,i,ar){
+var k=i,q=OLparQuo;
+if(k<ar.length){
+if(ar[k]==LABEL2){q(ar[++k],pf+'label2');return k;}}
+return -1;
+}
+
+// PUBLIC FUNCTIONS
+function overlib2(){
+var ar=arguments;if(over2)cClick2();if(!OLshowingsticky||ar.length==0)return false;
+if(OLtimerid>0){clearTimeout(OLtimerid);OLtimerid=0;};if(OLshowid>0){clearTimeout(OLshowid);
+OLshowid=0;}if(OLdelayid>0){clearTimeout(OLdelayid);OLdelayid=0;}
+if(typeof over.onmouseover!='undefined'&&over.onmouseover!=null){OLp1Hover=1;OLhover=0;
+over.onmouseover=null;}else OLp1Hover=0;OLp1over=null;OLp1scroll=(OLscrollPI&&o3_scroll?1:0);
+if(OLp1scroll){OLp1X=over.scroll.x;OLp1Y=over.scroll.y;OLclearScroll();o3_scroll=0;}
+if(OLfunctionPI)o3_function=ol_function;if(OLdraggablePI&&o3_draggable)OLclearDrag();
+OLp1exclusive=(OLexclusivePI&&o3_exclusive?1:0);OLp1modal=(OLmodalPI&&o3_modal?1:0);
+if((OLiframePI)&&OLifsP1){OLp1If=OLifsP1;OLifsP1=null;if(OLifsSh){OLp1IfShadow=OLifsSh;
+OLifsSh=null;}}else{OLp1If=null;OLp1IfSh=null}OLpullP1(OLo2c(1));
+if(OLbubblePI)OLp1bubbleHt=OLbubbleHt;if(OLfilterPI){OLp1fiIdx=OLfiIdx;
+if(!OLie55&&o3_filter)OLopOv(o3_filteropacity);}
+OLload(OLo2c(0));o3_label2=ol_label2;OLparseTokens('o3_',ar);OLpushP1(OLp1co);
+if(OLexclusivePI)o3_exclusive=OLp1exclusive;if(o3_decode)OLdecode();
+if(OLbubblePI)OLchkForBubbleEffect();if(o3_autostatus==2&&o3_cap!="")o3_status=o3_cap;
+else if(o3_autostatus==1&&o3_text!="")o3_status=o3_text;
+if(o3_delay==0)OLdispP2();else OLdelayid=setTimeout("OLdispP2()",o3_delay);
+if(o3_status!=""){self.status=o3_status;return true;}
+else if(!(OLop7&&event&&event.type=='mouseover'))return false;
+}
+
+function nd2(){
+if(OLshowingsticky2)return false;return cClick2();
+}
+
+function cClick2(){
+if(!over2||over!=over2)return false;
+if(OLtimerid>0){clearTimeout(OLtimerid);OLtimerid=0;}
+if(OLshowid>0){clearTimeout(OLshowid);OLshowid=0;}
+if(OLp1over&&OLp1over!=OLmkLyr()){OLp1over=null;over2=null;return false;}
+OLhover=0;over.onmouseover=null;OLhideObjectP2(over);
+OLshowingsticky2=0;if(OLp1bkdrop){bkdrop=OLp1bkdrop;OLp1bkdrop=null;}
+if(OLp1over){over=OLp1over;OLp1over=null;}
+if((OLiframePI)&&OLp1If){OLifsP1=OLp1If;OLp1If=null;
+if(OLp1IfShadow){OLifsSh=OLp1IfShadow;OLp1IfShadow=null;}}
+OLpushP1(OLo2c(1));if(OLbubblePI){OLbubbleHt=OLp1bubbleHt;OLp1BubbleHt=0;}
+if(OLfilterPI)OLfiIdx=OLp1fiIdx;var o=OLgetRefById();if(o&&o==over){
+if(OLp1scroll){o3_scroll=1;OLp1scroll=0;OLchkScroll(OLp1X,OLp1Y);}else o3_scroll=0;
+if(OLdraggablePI)OLcheckDrag();if(OLp1exclusive){o3_exclusive=1;OLp1exclusive=0;}
+if(OLhidePI)OLhideUtil(0,1,1,0,0,0);
+if(o3_autostatus==2&&o3_cap!="")o3_status=o3_cap;
+else if(o3_autostatus==1&&o3_text!="")o3_status=o3_text;
+if(OLp1Hover){OLoptMOUSEOFF(1);OLp1Hover=0;OLhover=1;}
+if(o3_status!="")self.status=o3_status;}
+if(OLmodalPI&&!OLp1modal)OLclearModal();OLp1modal=0;
+return false;
+}
+
+// SUPPORT FUNCTIONS
+function OLpullP1(c){var i,m=c.split(',');for(i=0;i<m.length;i++)eval('OLp1'+m[i]+'=o3_'+m[i]);}
+function OLpushP1(c){var i,m=c.split(',');for(i=0;i<m.length;i++)eval('o3_'+m[i]+'=OLp1'+m[i]);}
+function OLo2c(a){return OLp1or2+(a?','+OLp1:'')+(OLbubblePI?','+OLbubbleCmds:'')
++(OLdraggablePI?','+OLdraggableCmds:'')+(OLfilterPI?','+OLfilterCmds:'')+(OLmodalPI?','
++OLmodalCmds:'')+(OLprintPI?','+OLprintCmds:'')+(OLshadowPI?','+OLshadowCmds:'');}
+
+function OLdispP2(){
+var o=(OLns4?over:over.style),zI=parseInt(o.zIndex)+2;
+o3_delay=0;if(!(over2=OLmkLyr('overDiv2',o3_frame,zI)))return;
+OLp1over=over;over=over2;if(OLmodalPI&&!OLp1modal)OLchkModal();if(OLbubblePI)OLbubbleHt=0;
+if(o3_frame==self){if(o3_noclose)OLoptMOUSEOFF(0);else if(o3_mouseoff)OLoptMOUSEOFF(1);}
+if(o3_sticky)OLshowingsticky2=1;OLdoLyr();
+if(o3_timeout>0){if(OLtimerid>0)clearTimeout(OLtimerid);
+OLtimerid=setTimeout("cClick2()",o3_timeout);o3_timeout=0;}
+if(o3_ref){OLrefXY=OLgetRefXY(o3_ref);if(OLrefXY[0]==null){o3_ref='';o3_midx=0;o3_midy=0;}}
+if(OLshadowPI&&o3_shadow){OLp1bkdrop=bkdrop;bkdrop=bkdrop2;OLinitShadow();}
+if(OLiframePI){OLinitIfs();OLdispIfs();}if(OLfilterPI)OLinitFilterLyr(2);
+if(OLshadowPI&&o3_shadow)OLdispShadow();OLplaceLayer();
+OLshowid=setTimeout("OLshowObjectP2(over2)",1);OLallowmove=(o3_sticky||o3_nofollow)?0:1;
+}
+
+function OLshowObjectP2(o){
+OLshowid=0;if(o)o=(OLns4?o:o.style);
+if(((OLfilterPI)&&!OLchkFilter(o,2))||!OLfilterPI)o.visibility="visible";
+if(OLshadowPI)OLshowShadow();if(OLiframePI&&OLifsP2)OLifsP2.style.visibility="visible";
+if(OLhidePI)OLhideUtil(1,1,0);if(OLdraggablePI)OLcheckDrag();
+}
+
+function OLhideObjectP2(o){
+if(OLshowid>0){clearTimeout(OLshowid);OLshowid=0;}
+if(OLtimerid>0){clearTimeout(OLtimerid);OLtimerid=0;}o3_timeout=0;
+if(OLdelayid>0){clearTimeout(OLdelayid);OLdelayid=0;}o3_delay=0;
+if(o&&o==OLgetRefById('overDiv2')){if(OLscrollPI)OLclearScroll();if(OLdraggablePI)OLclearDrag();
+if(OLfilterPI)OLcleanupFilter(o,2);if(OLshadowPI)OLhideShadow();var os=(OLns4)?o:o.style;
+if(((OLfilterPI)&&!OLchkFadeOut2(os))||!OLfilterPI){os.visibility="hidden";
+if(!OLie55||!OLfilterPI||!o3_filter||o3_fadeout<0)o.innerHTML='';}
+if(OLiframePI&&OLifsP2)OLifsP2.style.visibility="hidden";}
+OLallowmove=o3_nofollow=0;o3_label2=ol_label2;
+}
+
+OLregRunTimeFunc(OLloadOvertwo);
+OLregCmdLineFunc(OLparseOvertwo);
+
+OLovertwoPI=1;
+OLloaded=1;
diff --git a/src/extras/sos-html-logs/share/html/overlib/overlibmws_print.js b/src/extras/sos-html-logs/share/html/overlib/overlibmws_print.js new file mode 100644 index 00000000..75659c46 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/overlibmws_print.js @@ -0,0 +1,141 @@ +/*
+ overlibmws_print.js plug-in module - Copyright Foteos Macrides 2002-2007. All rights reserved.
+ For support of the PRINT feature.
+ Initial: April 25, 2005 - Last Revised: January 1, 2007
+ See the Change History and Command Reference for overlibmws via:
+
+ http://www.macridesweb.com/oltest/
+
+ Published under an open source license: http://www.macridesweb.com/oltest/license.html
+*/
+
+OLloaded=0;
+var OLprintCmds='print,printbutton,noautoprint,printcolor,printfont,printsize,printtext,'
++'printbuttontext,printtitle,printfontclass,printcssfile,printxml,printdoctype,printroot,'
++'printtype,printcharset,printurl,printjob',OLprJob=null;OLregCmds(OLprintCmds);
+
+// DEFAULT CONFIGURATION
+if(OLud('print'))var ol_print=0;
+if(OLud('printbutton'))var ol_printbutton=0;
+if(OLud('noautoprint'))var ol_noautoprint=0;
+if(OLud('printcolor'))var ol_printcolor="#eeeeff";
+if(OLud('printfont'))var ol_printfont="Verdana,Arial,Helvetica";
+if(OLud('printsize'))var ol_printsize=1;
+if(OLud('printtext'))var ol_printtext='Print';
+if(OLud('printbuttontext'))var ol_printbuttontext='Print';
+if(OLud('printtitle'))var ol_printtitle="Click to Print";
+if(OLud('printfontclass'))var ol_printfontclass="";
+if(OLud('printcssfile'))var ol_printcssfile="";
+if(OLud('printxml'))var ol_printxml="";
+if(OLud('printdoctype'))var ol_printdoctype=
+ '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" '
++'"http://www.w3.org/TR/html4/loose.dtd">';
+if(OLud('printroot'))var ol_printroot="<html>";
+if(OLud('printtype'))var ol_printtype="text/html";
+if(OLud('printcharset'))var ol_printcharset="iso-8859-1";
+if(OLud('printurl'))var ol_printurl="";
+if(OLud('printjob'))var ol_printjob="";
+// END CONFIGURATION
+
+var o3_print=0,o3_printbutton=0,o3_noautoprint,o3_printcolor="",o3_printfont="",o3_printsize=1,
+o3_printtext="",o3_printbuttontext="",o3_printtitle="",o3_printfontclass="",o3_printcssfile="",
+o3_printxml="",o3_printdoctype="",o3_printroot="",o3_printtype="",o3_printcharset="",
+o3_printurl="",o3_printjob="";
+
+function OLloadPrint(){
+OLload(OLprintCmds);
+}
+
+function OLparsePrint(pf,i,ar){
+var k=i,t=OLtoggle,q=OLparQuo;
+if(k<ar.length){
+if(Math.abs(ar[k])==PRINT){t(ar[k],pf+'print');return k;}
+if(Math.abs(ar[k])==PRINTBUTTON){t(ar[k],pf+'printbutton');return k;}
+if(Math.abs(ar[k])==NOAUTOPRINT){t(ar[k],pf+'noautoprint');return k;}
+if(ar[k]==PRINTCOLOR){q(ar[++k],pf+'printcolor');return k;}
+if(ar[k]==PRINTFONT){q(ar[++k],pf+'printfont');return k;}
+if(ar[k]==PRINTSIZE){q(ar[++k],pf+'printsize');return k;}
+if(ar[k]==PRINTTEXT){q(ar[++k],pf+'printtext');return k;}
+if(ar[k]==PRINTBUTTONTEXT){q(ar[++k],pf+'printbuttontext');return k;}
+if(ar[k]==PRINTTITLE){q(ar[++k],pf+'printtitle');return k;}
+if(ar[k]==PRINTFONTCLASS){q(ar[++k],pf+'printfontclass');return k;}
+if(ar[k]==PRINTCSSFILE){q(ar[++k],pf+'printcssfile');return k;}
+if(ar[k]==PRINTXML){q(ar[++k],pf+'printxml');return k;}
+if(ar[k]==PRINTDOCTYPE){q(ar[++k],pf+'printdoctype');return k;}
+if(ar[k]==PRINTROOT){q(ar[++k],pf+'printroot');return k;}
+if(ar[k]==PRINTTYPE){q(ar[++k],pf+'printtype');return k;}
+if(ar[k]==PRINTCHARSET){q(ar[++k],pf+'printcharset');return k;}
+if(ar[k]==PRINTURL){q(ar[++k],pf+'printurl');return k;}
+if(ar[k]==PRINTJOB){q(ar[++k],pf+'printjob');return k;}}
+return -1;
+}
+
+function OLprintDims(){
+if(OLhasDims(o3_printsize)){if(OLns4)o3_printsize="2";}else
+if(!OLns4){var i=parseInt(o3_printsize);o3_printsize=(i>0&&i<8)?OLpct[i]:OLpct[0];}
+}
+
+function OLchkPrint(){if(!o3_sticky)o3_print=0;else over.print=null;}
+
+function OLprintCapLGF(){
+var n=(OLovertwoPI&&over2&&over==over2)?2:1;
+return(o3_print&&!o3_printbutton?'<td align="right"><a href="javascript:'+OLfnRef
++'return OLprint('+n+');" '+(o3_printtitle?'title="'+o3_printtitle+'" ':'')+'onclick="'
++OLfnRef+'return OLprint('+n+');"'+(o3_printfontclass?' class="'+o3_printfontclass+'">':
+(OLns4?'><':'')+OLlgfUtil(0,1,'','a',o3_printcolor,o3_printfont,o3_printsize))+o3_printtext
++(o3_printfontclass?'':(OLns4?OLlgfUtil(1,1,'','a'):''))+'</a></td>':'');
+}
+
+function OLprintFgLGF(){
+var n=(OLovertwoPI&&over2&&over==over2)?2:1;return (o3_print&&(!o3_cap||o3_printbutton)?
+'<div align="center"><form action="javascript:void(0);"><input type="button" '
++(OLns4?'':'style="font-family:Verdana;font-size:11px;color:#000000;" ')+'value="'
++o3_printbuttontext+'" title="'+o3_printtitle+'" '+(OLgek?'autocomplete="off" ':'')
++'onclick="'+OLfnRef+'return OLprint('+n+');" /></form></div>':'');
+}
+
+function OLprint(n){
+if(n!=2&&OLovertwoPI&&over2&&over==over2)cClick2();
+if(!(over&&over.print))return false;if(o3_printjob){eval(o3_printjob);return false;}
+if(o3_printurl){if(!window.print||o3_noautoprint)
+alert('Print (Control-P) the OLprint Window when it appears, then close it.');OLprJob=
+window.open(o3_printurl,'OLurlJob','resizable=1,status=1,screenX=0,left=0,screenY=0,top=0');
+OLprJob.focus();if(OLprJob){if(window.print&&!o3_noautoprint){OLprJob.print();
+setTimeout("OLprJob.close();OLprJob=null;",2);}}return false;}
+var sx=(OLshadowPI&&o3_shadow?o3_shadowx:0),sy=(OLshadowPI&&o3_shadow?o3_shadowy:0),
+lm=20+(sx<0?Math.abs(sx):0),rm=20+(sx>0?sx:0),tm=20+(sy<0?Math.abs(sy):0),bm=20+(sy>0?sy:0),
+pWd=o3_width,pHt=(OLns4?over.clip.height:over.offsetHeight),iWd=pWd+lm+rm,iHt=pHt+tm+bm,
+fs=(OLfilterPI&&OLie55&&o3_filter?o3_filtershadow:0),Fn='{return false;}',
+o2=(OLovertwoPI?OLp1or2c+','+OLp1or2co+','+OLp1co+',scroll,function':'');
+t=o3_printxml+o3_printdoctype+o3_printroot+'<head><meta http-equiv="content-Type" content="'
++o3_printtype+'; charset='+o3_printcharset+'" /><title>OLprint Job</title>'
++(o3_printcssfile?'<link rel="stylesheet" type="text/css" href="'+o3_printcssfile+'" />':'')
++'<script type="text/javascript">var OLfnRef="",OLna='+o3_noautoprint+',OLo2="'+o2+'";'
++'function OLprintAndClose(){if(window.print&&!OLna){self.print();setTimeout("self.close()",2);}'
++'else{alert("Print (Control-P) the OLprint Window, then close it.");}}'
++'function OLprint(){if(window.print)self.print();}function cClick(){self.close();}'
++'function nd()'+Fn+'function overlib2()'+Fn+'function nd2()'+Fn+'if(OLo2){'
++'var i,m=OLo2.split(",");for(i=0;i<m.length;i++)eval(m[i].toUpperCase()+"="+0);}</script>'
++'</head><body onLoad="self.focus();OLprintAndClose()">'
++(sx||sy?'<div id="printBackdrop" style="position:absolute;z-index:999;visibility:visible;'
++'width:'+o3_width+(OLns4?';':'px;')+'height:'+pHt+(OLns4?';':'px;')
++(o3_shadowimage?'background-image:url('+o3_shadowimage+');':'background-color:'
++o3_shadowcolor+';')+'left:'+(lm+sx).toString()+(OLns4?';':'px;')+'top:'+(tm+sy).toString()
++(OLns4?';':'px;')+'"></div>':'')
++'<div id="overPrintDiv" style="position:absolute;z-index:1000;visibility:visible;width:'
++o3_width+(OLns4?';':'px;')+(o3_background?'background-image:url('+o3_background+');':'')
++'left:'+lm.toString()+(OLns4?';':'px;')+'top:'+tm.toString()+(OLns4?';':'px;')
++(fs?'filter:progid:DXImageTransform.Microsoft.':'')
++(fs==2?'Shadow(color=\''+o3_filtershadowcolor+'\',direction=135,strength=5);':'')
++(fs==1?'Dropshadow(color=\''+o3_filtershadowcolor+'\');':'')+'">'+over.print
++'</div></body></html>';
+OLprJob=window.open('','OLprintJob','resizable=0,width='+iWd+',height='+iHt
++',status=0,location=0,toolbar=0,menubar=0,scrolling=0,screenX=0,left=0,screenY=0,top=0');
+OLprJob.document.write(t);OLprJob.document.close();return false;
+}
+
+OLregRunTimeFunc(OLloadPrint);
+OLregCmdLineFunc(OLparsePrint);
+
+OLprintPI=1;
+OLloaded=1;
diff --git a/src/extras/sos-html-logs/share/html/overlib/overlibmws_regCore.js b/src/extras/sos-html-logs/share/html/overlib/overlibmws_regCore.js new file mode 100644 index 00000000..3c079f71 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/overlibmws_regCore.js @@ -0,0 +1,75 @@ +/*
+ overlibmws_regCore.js plug-in module - Copyright Foteos Macrides 2003-2007. All rights reserved.
+ Import this file to declare the core command constants in frame documents which do not
+ import the core module, overlibmws.js, but point to the overlib() and nd() commands in
+ another document of the frameset, e.g. parent.scene.overlib(...) and parent.scene.nd()
+ in a frame document named "scene" which does import the core module. You can then use
+ this file's OLregisterPlugins() function via a script block to declare pre-existing
+ plugin modules, or it's OLregisterCommands() function for new plugins whose
+ commands are not yet defined as string variables in this file. The order of
+ entries in those functions should parallel the order of importing the plugins.
+ Initial: August 3, 2003 - Last Revised: January 1, 2007
+ See the Change History and Command Reference for overlibmws via:
+
+ http://www.macridesweb.com/oltest/
+
+ Published under an open source license: http://www.macridesweb.com/oltest/license.html
+*/
+
+var OLloaded=0,OLpmCnt=1,OLpMtr=new Array();
+OLregisterCommands('inarray,caparray,caption,closetext,right,left,center,autostatuscap,padx,'
++'pady,below,above,vcenter,donothing,nofollow,background,offsetx,offsety,fgcolor,bgcolor,'
++'cgcolor,textcolor,capcolor,width,wrap,wrapmax,height,border,base,status,autostatus,snapx,'
++'snapy,fixx,fixy,relx,rely,midx,midy,ref,refc,refp,refx,refy,fgbackground,bgbackground,'
++'cgbackground,fullhtml,capicon,textfont,captionfont,textsize,captionsize,timeout,delay,hauto,'
++'vauto,nojustx,nojusty,fgclass,bgclass,cgclass,capbelow,textpadding,textfontclass,'
++'captionpadding,captionfontclass,sticky,noclose,mouseoff,offdelay,closecolor,closefont,'
++'closesize,closeclick,closetitle,closefontclass,decode,label');
+
+var CSSOFF=DONOTHING,CSSCLASS=DONOTHING;
+var OLpluginBUBBLE='bubble,bubbletype,adjbubble';
+var OLpluginCROSSFRAME='frame';
+var OLpluginDEBUG='allowdebug';
+var OLpluginDRAGGABLE='draggable,dragcap,dragid';
+var OLpluginEXCLUSIVE='exclusive,exclusivestatus,exclusiveoverride';
+var OLpluginFILTER='filter,fadein,fadeout,fadetime,filteropacity,filtershadow,filtershadowcolor';
+var OLpluginFUNCTION='function';
+var OLpluginHIDE='hideselectboxes,hidebyid,hidebyidall,hidebyidns4';
+var OLpluginMODAL='modal';
+var OLpluginOVERTWO='label2';
+var OLpluginPRINT='print,printbutton,noautoprint,printcolor,printfont,printsize,printtext,'
++'printbuttontext,printtitle,printfontclass,printcssfile,printxml,printdoctype,printroot,'
++'printtype,printcharset,printurl,printjob';
+var OLpluginSCROLL='scroll';
+var OLpluginSHADOW='shadow,shadowx,shadowy,shadowcolor,shadowimage,shadowopacity';
+
+// PUBLIC FUNCTIONS
+function OLregisterCommands(cmdStr){
+if(typeof cmdStr!='string')return;
+var pM=cmdStr.split(',');
+OLpMtr=OLpMtr.concat(pM);
+for(var i=0;i<pM.length;i++)
+eval(pM[i].toUpperCase()+'='+OLpmCnt++);
+}
+
+function OLregisterPlugins(){
+var ar=arguments;
+for(var i=0;i<ar.length;i++){
+if(ar[i].toUpperCase()=='BUBBLE'){OLregisterCommands(OLpluginBUBBLE);continue;}
+if(ar[i].toUpperCase()=='CROSSFRAME'){OLregisterCommands(OLpluginCROSSFRAME);continue;}
+if(ar[i].toUpperCase()=='DEBUG'){OLregisterCommands(OLpluginDEBUG);continue;}
+if(ar[i].toUpperCase()=='DRAGGABLE'){OLregisterCommands(OLpluginDRAGGABLE);continue;}
+if(ar[i].toUpperCase()=='EXCLUSIVE'){OLregisterCommands(OLpluginEXCLUSIVE);continue;}
+if(ar[i].toUpperCase()=='FILTER'){OLregisterCommands(OLpluginFILTER);continue;}
+if(ar[i].toUpperCase()=='FUNCTION'){OLregisterCommands(OLpluginFUNCTION);continue;}
+if(ar[i].toUpperCase()=='HIDE'){OLregisterCommands(OLpluginHIDE);continue;}
+if(ar[i].toUpperCase()=='IFRAME')continue;
+if(ar[i].toUpperCase()=='MODAL'){OLregisterCommands(OLpluginMODAL);continue;}
+if(ar[i].toUpperCase()=='OVERTWO'){OLregisterCommands(OLpluginOVERTWO);continue;}
+if(ar[i].toUpperCase()=='PRINT'){OLregisterCommands(OLpluginPRINT);continue;}
+if(ar[i].toUpperCase()=='REGCORE')continue;
+if(ar[i].toUpperCase()=='SCROLL'){OLregisterCommands(OLpluginSCROLL);continue;}
+if(ar[i].toUpperCase()=='SHADOW'){OLregisterCommands(OLpluginSHADOW);continue;}}
+}
+
+OLloaded=1;
diff --git a/src/extras/sos-html-logs/share/html/overlib/overlibmws_scroll.js b/src/extras/sos-html-logs/share/html/overlib/overlibmws_scroll.js new file mode 100644 index 00000000..40f344eb --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/overlibmws_scroll.js @@ -0,0 +1,70 @@ +/*
+ overlibmws_scroll.js plug-in module - Copyright Foteos Macrides 2002-2007. All rights reserved.
+ For support of the SCROLL feature.
+ Initial: October 20, 2002 - Last Revised: January 1, 2007
+ See the Change History and Command Reference for overlibmws via:
+
+ http://www.macridesweb.com/oltest/
+
+ Published under an open source license: http://www.macridesweb.com/oltest/license.html
+*/
+
+OLloaded=0;
+OLregCmds('scroll');
+
+// DEFAULT CONFIGURATION
+if(OLud('scroll'))var ol_scroll=0;
+// END CONFIGURATION
+
+var o3_scroll=0,OLscrollRefresh=100;
+
+function OLloadScroll(){
+OLload('scroll');
+}
+
+function OLparseScroll(pf,i,ar){
+var k=i;
+if(k<ar.length){if(Math.abs(ar[k])==SCROLL){OLtoggle(ar[k],pf+'scroll');return k;}}
+return -1;
+}
+
+function OLchkScroll(X,Y){
+if(o3_scroll){if(!OLshowingsticky||
+(OLovertwoPI&&over==over2&&!OLshowingsticky2)||
+(OLdraggablePI&&o3_draggable&&o3_frame==self)||
+(o3_relx==null&&o3_midx==null)||(o3_rely==null&&o3_midy==null))o3_scroll=0;
+else if(typeof over.scroll=='undefined'||over.scroll.canScroll)
+over.scroll=new OLsetScroll(X,Y,OLscrollRefresh);}
+}
+
+function OLsetScroll(X,Y,refresh){
+if(o3_scroll){this.canScroll=0;this.refresh=refresh;this.x=X;this.y=Y;
+this.timer=setTimeout("OLscrollReposition()",this.refresh);}
+}
+
+function OLclearScroll(){
+if(o3_scroll){if(typeof over.scroll=='undefined'){o3_scroll=0;return;}
+over.scroll.canScroll=1;if(over.scroll.timer){
+clearTimeout(over.scroll.timer);over.scroll.timer=null;}}
+}
+
+function OLscrollReposition(){
+var o=over,oD=(OLovertwoPI&&over==over2?'overDiv2':'overDiv');
+if(o3_scroll&&o&&o==OLgetRefById(oD)){var X,Y,pgLeft,pgTop;
+pgLeft=(OLie4)?OLfd().scrollLeft:o3_frame.pageXOffset;
+pgTop=(OLie4)?OLfd().scrollTop:o3_frame.pageYOffset;
+X=(o.pageX?o.pageX:o.style.left?o.style.left:0)-pgLeft;
+Y=(o.pageY?o.pageY:o.style.top?o.style.top:0)-pgTop;
+if(X!=o.scroll.x||Y!=o.scroll.y){
+OLrepositionTo(o,pgLeft+o.scroll.x,pgTop+o.scroll.y);
+if(OLshadowPI)OLrepositionShadow(pgLeft+o.scroll.x,pgTop+o.scroll.y);
+if(OLiframePI)OLrepositionIfs(pgLeft+o.scroll.x,pgTop+o.scroll.y);
+if(OLhidePI)OLhideUtil(0,1,1,0,0,0);}
+o.scroll.timer=setTimeout("OLscrollReposition()",o.scroll.refresh);}
+}
+
+OLregRunTimeFunc(OLloadScroll);
+OLregCmdLineFunc(OLparseScroll);
+
+OLscrollPI=1;
+OLloaded=1;
diff --git a/src/extras/sos-html-logs/share/html/overlib/overlibmws_shadow.js b/src/extras/sos-html-logs/share/html/overlib/overlibmws_shadow.js new file mode 100644 index 00000000..a85f98e0 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/overlibmws_shadow.js @@ -0,0 +1,113 @@ +/*
+ overlibmws_shadow.js plug-in module - Copyright Foteos Macrides 2003-2007. All rights reserved.
+ For support of the SHADOW feature.
+ Initial: July 14, 2003 - Last Revised: January 1, 2007
+ See the Change History and Command Reference for overlibmws via:
+
+ http://www.macridesweb.com/oltest/
+
+ Published under an open source license: http://www.macridesweb.com/oltest/license.html
+*/
+
+OLloaded=0;
+var OLshadowCmds='shadow,shadowx,shadowy,shadowcolor,shadowimage,shadowopacity';
+OLregCmds(OLshadowCmds);
+
+// DEFAULT CONFIGURATION
+if(OLud('shadow'))var ol_shadow=0;
+if(OLud('shadowx'))var ol_shadowx=5;
+if(OLud('shadowy'))var ol_shadowy=5;
+if(OLud('shadowcolor'))var ol_shadowcolor="#666666";
+if(OLud('shadowimage'))var ol_shadowimage="";
+if(OLud('shadowopacity'))var ol_shadowopacity=60;
+// END CONFIGURATION
+
+var o3_shadow=0,o3_shadowx=5,o3_shadowy=5,o3_shadowcolor="#666666",o3_shadowimage="";
+var o3_shadowopacity=60,bkdrop=null;
+
+function OLloadShadow(){
+OLload(OLshadowCmds);
+}
+
+function OLparseShadow(pf,i,ar){
+var k=i,p=OLpar,q=OLparQuo;
+if(k<ar.length){
+if(Math.abs(ar[k])==SHADOW){OLtoggle(ar[k],pf+'shadow');return k;}
+if(ar[k]==SHADOWX){p(ar[++k],pf+'shadowx');return k;}
+if(ar[k]==SHADOWY){p(ar[++k],pf+'shadowy');return k;}
+if(ar[k]==SHADOWCOLOR){q(ar[++k],pf+'shadowcolor');return k;}
+if(ar[k]==SHADOWIMAGE){q(ar[++k],pf+'shadowimage');return k;}
+if(ar[k]==SHADOWOPACITY){p(ar[++k],pf+'shadowopacity');return k;}}
+return -1;
+}
+
+function OLdispShadow(){
+if(o3_shadow){OLgetShadowLyrRef();if(bkdrop)OLgenerateShadowLyr();}
+}
+
+function OLinitShadow(){
+if(OLie55&&OLfilterPI&&o3_filter){if(o3_shadow){o3_shadow=0;
+if(!o3_filtershadow){o3_filtershadow=2;o3_filtershadowcolor=o3_shadowcolor;}}return;}
+var o;if(!(o=OLmkLyr((OLovertwoPI&&over2&&over==over2?'backdrop2':'backdrop'),
+o3_frame,999))||bkdrop!=o){bkdrop=null;OLgetShadowLyrRef();}
+}
+
+function OLgetShadowLyrRef(){
+if(bkdrop||!o3_shadow)return;
+bkdrop=OLgetRefById((OLovertwoPI&&over2&&over==over2?'backdrop2':'backdrop'));
+if(!bkdrop){o3_shadow=0;bkdrop=null;}
+}
+
+function OLgenerateShadowLyr(){
+var wd=(OLns4?over.clip.width:over.offsetWidth),hgt=(OLns4?over.clip.height:over.offsetHeight);
+if(OLns4){bkdrop.clip.width=wd;bkdrop.clip.height=hgt;
+if(o3_shadowimage)bkdrop.background.src=o3_shadowimage;
+else{bkdrop.bgColor=o3_shadowcolor;bkdrop.zIndex=over.zIndex -1;}
+}else{var o=bkdrop.style;o.width=wd+'px';o.height=hgt+'px';
+if(o3_shadowimage)o.backgroundImage="url("+o3_shadowimage+")";
+else o.backgroundColor=o3_shadowcolor;
+o.clip='rect(0px '+wd+'px '+hgt+'px 0px)';o.zIndex=over.style.zIndex -1;
+if(o3_shadowopacity){var op=o3_shadowopacity;op=(op<=100&&op>0?op:100);
+if(OLie4&&!OLieM&&typeof o.filter=='string'){
+o.filter='Alpha(opacity='+op+')';if(OLie55&&typeof bkdrop.filters=='object')
+bkdrop.filters.alpha.enabled=1;}else{op=op/100;OLopBk(op);}}}
+}
+
+function OLopBk(op){
+var o=bkdrop.style;
+if(typeof o.opacity!='undefined')o.opacity=op;
+else if(typeof o.MozOpacity!='undefined')o.MozOpacity=op;
+else if(typeof o.KhtmlOpacity!='undefined')o.KhtmlOpacity=op;
+}
+
+function OLcleanUpShadow(){
+if(!bkdrop)return;
+if(OLns4){bkdrop.bgColor=null;bkdrop.background.src=null;}else{
+var o=bkdrop.style;o.backgroundColor='transparent';o.backgroundImage='none';
+if(OLie4&&!OLieM&&typeof o.filter=='string'){
+o.filter='Alpha(opacity=100)';if(OLie55&&typeof bkdrop.filters=='object')
+bkdrop.filters.alpha.enabled=0;}else OLopBk(1.0);
+if(OLns6){o.width=1+'px';o.height=1+'px';
+OLrepositionTo(bkdrop,o3_frame.pageXOffset,o3_frame.pageYOffset);}}
+}
+
+function OLshowShadow(){if(bkdrop&&o3_shadow){var o=(OLns4?bkdrop:bkdrop.style);
+if(!OLns4&&!OLieM&&(OLfilterPI&&o3_filter&&o3_fadein))OLopOvSh(1);o.visibility="visible";}
+}
+
+function OLhideShadow(){
+if(bkdrop&&o3_shadow){var o=OLgetRefById((OLovertwoPI&&over2&&over==over2?
+'backdrop2':'backdrop'));if(o&&o==bkdrop){var os=(OLns4?bkdrop:bkdrop.style);
+if(OLns4||OLieM||!OLfilterPI||((OLfilterPI)&&(!o3_filter||!o3_fadeout||!OLhasOp()))){
+os.visibility="hidden";OLcleanUpShadow();}}}
+}
+
+function OLrepositionShadow(X,Y){
+if(bkdrop&&o3_shadow)OLrepositionTo(bkdrop,X+o3_shadowx,Y+o3_shadowy);
+}
+
+OLregRunTimeFunc(OLloadShadow);
+OLregCmdLineFunc(OLparseShadow);
+
+OLshadowPI=1;
+OLloaded=1;
diff --git a/src/extras/sos-html-logs/share/html/overlib/overlibmwslogo.gif b/src/extras/sos-html-logs/share/html/overlib/overlibmwslogo.gif Binary files differnew file mode 100644 index 00000000..f7b55084 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/overlibmwslogo.gif diff --git a/src/extras/sos-html-logs/share/html/overlib/print.gif b/src/extras/sos-html-logs/share/html/overlib/print.gif Binary files differnew file mode 100644 index 00000000..f1270a2f --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/print.gif diff --git a/src/extras/sos-html-logs/share/html/overlib/pushpin.gif b/src/extras/sos-html-logs/share/html/overlib/pushpin.gif Binary files differnew file mode 100644 index 00000000..79c0dbdb --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/pushpin.gif diff --git a/src/extras/sos-html-logs/share/html/overlib/quotation.gif b/src/extras/sos-html-logs/share/html/overlib/quotation.gif Binary files differnew file mode 100644 index 00000000..45a01edc --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/quotation.gif diff --git a/src/extras/sos-html-logs/share/html/overlib/semitrans.gif b/src/extras/sos-html-logs/share/html/overlib/semitrans.gif Binary files differnew file mode 100644 index 00000000..df1bc223 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/semitrans.gif diff --git a/src/extras/sos-html-logs/share/html/overlib/showCalendar.gif b/src/extras/sos-html-logs/share/html/overlib/showCalendar.gif Binary files differnew file mode 100644 index 00000000..68d10f1b --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/showCalendar.gif diff --git a/src/extras/sos-html-logs/share/html/overlib/sprintf.js b/src/extras/sos-html-logs/share/html/overlib/sprintf.js new file mode 100644 index 00000000..f5170ab3 --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/sprintf.js @@ -0,0 +1,133 @@ + /* Function printf(format_string,arguments...)
+ * Javascript emulation of the C printf function (modifiers and argument types
+ * "p" and "n" are not supported due to language restrictions)
+ *
+ * Copyright 2003 K&L Productions. All rights reserved
+ * http://www.klproductions.com
+ *
+ * Terms of use: This function can be used free of charge IF this header is not
+ * modified and remains with the function code.
+ *
+ * Legal: Use this code at your own risk. K&L Productions assumes NO resposibility
+ * for anything.
+ ********************************************************************************/
+function sprintf(fstring)
+ { var pad = function(str,ch,len)
+ { var ps='';
+ for(var i=0; i<Math.abs(len); i++) ps+=ch;
+ return len>0?str+ps:ps+str;
+ }
+ var processFlags = function(flags,width,rs,arg)
+ { var pn = function(flags,arg,rs)
+ { if(arg>=0)
+ { if(flags.indexOf(' ')>=0) rs = ' ' + rs;
+ else if(flags.indexOf('+')>=0) rs = '+' + rs;
+ }
+ else
+ rs = '-' + rs;
+ return rs;
+ }
+ var iWidth = parseInt(width,10);
+ if(width.charAt(0) == '0')
+ { var ec=0;
+ if(flags.indexOf(' ')>=0 || flags.indexOf('+')>=0) ec++;
+ if(rs.length<(iWidth-ec)) rs = pad(rs,'0',rs.length-(iWidth-ec));
+ return pn(flags,arg,rs);
+ }
+ rs = pn(flags,arg,rs);
+ if(rs.length<iWidth)
+ { if(flags.indexOf('-')<0) rs = pad(rs,' ',rs.length-iWidth);
+ else rs = pad(rs,' ',iWidth - rs.length);
+ }
+ return rs;
+ }
+ var converters = new Array();
+ converters['c'] = function(flags,width,precision,arg)
+ { if(typeof(arg) == 'number') return String.fromCharCode(arg);
+ if(typeof(arg) == 'string') return arg.charAt(0);
+ return '';
+ }
+ converters['d'] = function(flags,width,precision,arg)
+ { return converters['i'](flags,width,precision,arg);
+ }
+ converters['u'] = function(flags,width,precision,arg)
+ { return converters['i'](flags,width,precision,Math.abs(arg));
+ }
+ converters['i'] = function(flags,width,precision,arg)
+ { var iPrecision=parseInt(precision);
+ var rs = ((Math.abs(arg)).toString().split('.'))[0];
+ if(rs.length<iPrecision) rs=pad(rs,' ',iPrecision - rs.length);
+ return processFlags(flags,width,rs,arg);
+ }
+ converters['E'] = function(flags,width,precision,arg)
+ { return (converters['e'](flags,width,precision,arg)).toUpperCase();
+ }
+ converters['e'] = function(flags,width,precision,arg)
+ { iPrecision = parseInt(precision);
+ if(isNaN(iPrecision)) iPrecision = 6;
+ rs = (Math.abs(arg)).toExponential(iPrecision);
+ if(rs.indexOf('.')<0 && flags.indexOf('#')>=0) rs = rs.replace(/^(.*)(e.*)$/,'$1.$2');
+ return processFlags(flags,width,rs,arg);
+ }
+ converters['f'] = function(flags,width,precision,arg)
+ { iPrecision = parseInt(precision);
+ if(isNaN(iPrecision)) iPrecision = 6;
+ rs = (Math.abs(arg)).toFixed(iPrecision);
+ if(rs.indexOf('.')<0 && flags.indexOf('#')>=0) rs = rs + '.';
+ return processFlags(flags,width,rs,arg);
+ }
+ converters['G'] = function(flags,width,precision,arg)
+ { return (converters['g'](flags,width,precision,arg)).toUpperCase();
+ }
+ converters['g'] = function(flags,width,precision,arg)
+ { iPrecision = parseInt(precision);
+ absArg = Math.abs(arg);
+ rse = absArg.toExponential();
+ rsf = absArg.toFixed(6);
+ if(!isNaN(iPrecision))
+ { rsep = absArg.toExponential(iPrecision);
+ rse = rsep.length < rse.length ? rsep : rse;
+ rsfp = absArg.toFixed(iPrecision);
+ rsf = rsfp.length < rsf.length ? rsfp : rsf;
+ }
+ if(rse.indexOf('.')<0 && flags.indexOf('#')>=0) rse = rse.replace(/^(.*)(e.*)$/,'$1.$2');
+ if(rsf.indexOf('.')<0 && flags.indexOf('#')>=0) rsf = rsf + '.';
+ rs = rse.length<rsf.length ? rse : rsf;
+ return processFlags(flags,width,rs,arg);
+ }
+ converters['o'] = function(flags,width,precision,arg)
+ { var iPrecision=parseInt(precision);
+ var rs = Math.round(Math.abs(arg)).toString(8);
+ if(rs.length<iPrecision) rs=pad(rs,' ',iPrecision - rs.length);
+ if(flags.indexOf('#')>=0) rs='0'+rs;
+ return processFlags(flags,width,rs,arg);
+ }
+ converters['X'] = function(flags,width,precision,arg)
+ { return (converters['x'](flags,width,precision,arg)).toUpperCase();
+ }
+ converters['x'] = function(flags,width,precision,arg)
+ { var iPrecision=parseInt(precision);
+ arg = Math.abs(arg);
+ var rs = Math.round(arg).toString(16);
+ if(rs.length<iPrecision) rs=pad(rs,' ',iPrecision - rs.length);
+ if(flags.indexOf('#')>=0) rs='0x'+rs;
+ return processFlags(flags,width,rs,arg);
+ }
+ converters['s'] = function(flags,width,precision,arg)
+ { var iPrecision=parseInt(precision);
+ var rs = arg;
+ if(rs.length > iPrecision) rs = rs.substring(0,iPrecision);
+ return processFlags(flags,width,rs,0);
+ }
+ farr = fstring.split('%');
+ retstr = farr[0];
+ fpRE = /^([-+ #]*)(\d*)\.?(\d*)([cdieEfFgGosuxX])(.*)$/;
+ for(var i=1; i<farr.length; i++)
+ { fps=fpRE.exec(farr[i]);
+ if(!fps) continue;
+ if(arguments[i]!=null) retstr+=converters[fps[4]](fps[1],fps[2],fps[3],arguments[i]);
+ retstr += fps[5];
+ }
+ return retstr;
+ }
+/* Function sprintf() END */
\ No newline at end of file diff --git a/src/extras/sos-html-logs/share/html/overlib/square.gif b/src/extras/sos-html-logs/share/html/overlib/square.gif Binary files differnew file mode 100644 index 00000000..9d43ad7e --- /dev/null +++ b/src/extras/sos-html-logs/share/html/overlib/square.gif diff --git a/src/extras/sos-html-logs/sos-html-logs b/src/extras/sos-html-logs/sos-html-logs new file mode 100755 index 00000000..aca754b5 --- /dev/null +++ b/src/extras/sos-html-logs/sos-html-logs @@ -0,0 +1,670 @@ +#!/usr/bin/env python + +#from optparse import OptionParser, Option +import time, sys, os, glob +import getopt, traceback +try: import cherrypy +except: print "python-cherrypy is missing. Exiting."; sys.exit(1) +from cherrypy.lib import cptools +import pdb + +sys.path.append("lib") + +import soshtmllogs.database +from soshtmllogs.logs_abstraction import * + +class Root: + def header(self): + return """ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> + +<html> +<head> +<title></title> +<script type="text/javascript" src="overlib/overlibmws.js"></script> +<script type="text/javascript" src="overlib/overlibmws_draggable.js"></script> +<script type="text/javascript" src="overlib/overlibmws_filter.js"></script> +<script type="text/javascript" src="overlib/overlibmws_overtwo.js"></script> +<script type="text/javascript" src="overlib/overlibmws_shadow.js"></script> +<script type="text/javascript" src="overlib/overlibmws_scroll.js"></script> + +<script TYPE="text/javascript"> +<!-- +var ol_width=300; +var ol_fgcolor='#ffffcc'; +var ol_bgcolor='#666666'; +//--> +</script> + +<script type="text/javascript"> +<!-- +OLpageDefaults(BGCLASS,'olbg', CGCLASS,'olcg', FGCLASS,'olfg', + CAPTIONFONTCLASS,'olcap', CLOSEFONTCLASS,'olclo', TEXTFONTCLASS,'oltxt'); + +function OLiframeContent(src, width, height, name, frameborder, scrolling) { + return ('<iframe src="'+src+'" width="'+width+'" height="'+height+'"' + +(name!=null?' name="'+name+'" id="'+name+'"':'') + +(frameborder!=null?' frameborder="'+frameborder+'"':'') + +' scrolling="'+(scrolling!=null?scrolling:'auto')+'">' + +'<div>[iframe not supported]</div></iframe>'); +} +//--> +</script> + +<style type="text/css"> +<!-- +.olbg {background-color:#333399;} +.olcg {background-color:#aa0000; text-align:center;} # title +.olcgif {background-color:#333399; text-align:center;} +.olfg {background-color:#ecf5ff; text-align:center;} # body bg +.olfgif {background-color:#bbddff; text-align:center;} +.olcap {font-family:Arial; font-size:12px; font-weight:bold; color:#ffffff;} +a.olclo {font-family:Verdana; font-size:11px; font-weight:bold; color:#ddddff;} +a.olclo:hover {color:#ffffff;} +.oltxt {font-family:Arial; font-size:12px; color:#000000;} +--> +</style> + +<script type="text/javascript"> +<!-- + +function log_toggle_color(obj) { + if (obj.style.color == '') { + obj.style.color = 'red'; + obj.style.fontWeight='bolder'; + } else { + obj.style.color = ''; + obj.style.fontWeight='normal'; + } + return True; +} + +function get_selection_text() { + var txt = ''; + if (window.getSelection) { + txt = window.getSelection(); + } else if (document.getSelection) { + txt = document.getSelection(); + } else if (document.selection) { + txt = document.selection.createRange().text; + } else return; + return txt; +} + +//--> +</script> + +<style type="text/css"> +<!-- + +body { + font: normal 11px auto "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; + color: #4f6b72; + background: #E6EAE9; +} + +a { + color: #c75f3e; +} + +#mytable { + width: 97%; + padding: 0; + margin: 0; +} + +caption { + padding: 0 0 5px 0; + width: 97%; + font: italic 11px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; + text-align: right; +} + +th { + font: bold 11px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; + color: #4f6b72; + letter-spacing: 2px; + text-transform: uppercase; + text-align: left; + padding: 6px 6px 6px 12px; + background: #a50000; + color: white; +} + +th.nobg { + border-top: 0; + border-left: 0; + border-right: 1px solid #C1DAD7; + background: none; + color: black; +} + +td { + border-right: 1px solid #C1DAD7; + border-bottom: 1px solid #C1DAD7; + background: #fff; + color: #4f6b72; + letter-spacing: -1px; + white-space:pre-wrap; + font-family: monospace; +} + +pre { + white-space: pre-wrap; /* css-3 */ + white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + word-wrap: break-word; /* Internet Explorer 5.5+ */ +} + +td.alt { + background: #ffbaba; + color: #797268; +} + +th.newday { + text-align: right; + padding: 2px; +} + +th.spec { + border-left: 1px solid #C1DAD7; + border-right: 1px solid #C1DAD7; + border-top: 0; + background: #fff; + font: bold 10px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; + color: #797268; + vertical-align: top; +} + +th.specalt { + border-left: 1px solid #C1DAD7; + border-right: 1px solid #C1DAD7; + border-top: 0; + background: #cecfce; + font: bold 10px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; + color: #797268; + vertical-align: top; +} + +.log_invalid_date { + color: dark green; + font-weight: bold; + background-color: yellow; +} + +input { + border: 1px solid #cc0000; + background: red; + color: white; +} + +#fixme { position: fixed; right: 0px; top: 0px; z-index: 2; } + +#navigation_enabled { + border: 1px solid #cc0000; + background: red; + color: white; + cursor: pointer; +} + +#navigation_disabled { + border: 1px solid #cc0000; + background: gray; + color: white; + cursor: not-allowed; +} + +.progressbar { + border: 2px solid black; + background: #ffa; + position: relative; + width: 500px; + height: 4.5em; + margin-bottom: 4px; + -moz-border-radius-topright: 2em; + -moz-border-radius-bottomright: 2em; +} + +.progressbar div { + position: absolute; + top: 0px; + left: 0px; + height: 99%; + background-color: #cf5; +} + +.progressbar div p { + white-space: nowrap; + display: block; + height: 100%; + margin: 0; + padding: 0 1em; + line-height: 2em; + font-weight: bold; + font-size: x-large; +} + +.progressbar p span { + display: none; +} + +A:link { font-weight: normal; text-decoration: none; } +A:visited { font-weight: normal; text-decoration: none; } + +--> +</style> + +</head> +<body> + +<a href="/">Index</a> <a href="/browse">Browse</a><p> + +""" + def footer(self): + return """</body></html>""" + + def browse(self): + position = cherrypy.session.get('position') + dates_per_page = cherrypy.session.get('dates_per_page', 300) + filter_daemons = cherrypy.session.get('filter_daemons', []) + + cluster = cluster_master.instance() + + if position: + cluster.seek(position) + else: + cluster.seek_beginning() + position = cluster.tell() + + yield self.header() + + yield """<table id="mytable" cellspacing="0" summary=""> +<caption>Generated by sos-logs2html 1.0 on %s</caption> +<ul id="toc"> +</ul>""" % (time.strftime("%B %d %H:%M:%S")) + + first_date = None + prev_date = None + line = 0 + log_lines = 0 + + for date in cluster: + + events = myDB.execute_and_fetch("""select host, position, message, css_style from events where date = %d""" % (time.mktime(date.date))) + + lines = {} + line_has_content = False + + for host in cluster.host_names(): + lines[host] = [] + try: + for log in date[host]: + + if log.daemon() in filter_daemons: + continue + + lines[host].append(log) + line_has_content = True + + except "Eof": + pass + + if not line_has_content: + continue + + if line == 0 or line % 200 == 0: + yield """<tr><th scope="col" abbr="Date/Time" class="nobg">Time</th>""" + + for host in cluster.host_names(): + yield """<th scope="col" abbr="%s">%s</th>""" % (host, host) + + yield """</tr>""" + + if line == 0 or line % 200 == 0 or time.strftime("%b %d", prev_date) != time.strftime("%b %d", date.date): + yield("""<tr><th scope="row" class="newday" colspan=%d>%s</th></tr>""" % (len(cluster.hosts) + 2, time.strftime("%A, %B %d", date.date))) + + if line % 2 == 0: row_class = "spec" + else: row_class = "specalt" + + color_shades = [(181,193,255), (76,102,236), (255,191,100), (255,232,200)] + color_shades.append(color_shades[0]) + + if date.date[3] in range(0, 6): + shade_idx, shade_div = 0, 6 + elif date.date[3] in range(6, 12): + shade_idx, shade_div = 1, 12 + elif date.date[3] in range(12, 18): + shade_idx, shade_div = 2, 18 + elif date.date[3] in range(18, 24): + shade_idx, shade_div = 3, 24 + + color_hour = rgb_to_hex(color_gradient(color_shades[shade_idx], color_shades[shade_idx+1], (date.date[3] + (date.date[4]/60)) * 100 / shade_div)) + + yield("""<TR><th scope="row" class="%s" style="background-color: #%s"><a href="/goto/%s">%s</a></th>""" % (row_class, color_hour, time.strftime("%Y%m%d%H%M%S", date.date), time.strftime("%H:%M:%S", date.date))) + + for host in cluster.host_names(): + yield """<td style="vertical-align:top">""" + if lines.has_key(host): + for log in lines[host]: + css_class = None + css_style = None + + for event_host, event_position, message, event_css_style in events: + if event_host == host and event_position == log.position: + css_style = event_css_style + + yield """<span style="cursor:pointer;%s" """ % css_style + + if not log.date() or log.date() != date.date: + yield """class="log_invalid_date" """ + + yield """onclick="javascript:log_toggle_color(this);">%s</span><br>""" % log.message() + + yield "</td>\n" + + yield "</tr>" + + line += 1 + prev_date = date.date + + if not first_date: + first_date = date.date + + if line > dates_per_page: + break + + yield "</table>" + + cherrypy.session['first_date_on_page'] = first_date + cherrypy.session['last_date_on_page'] = date.date + + cherrypy.session['position'] = position + cherrypy.session['dates_per_page'] = dates_per_page + + yield self.navigation() + + yield self.footer() + + def draw_progressbar(self, percent): + yield """<div class="progressbar"><div style="width: %d%%;"><p>Parsing in progress (%d%% done)</p></div></div>""" % (percent, percent) + + def index(self): + + cluster = cluster_master.instance() + + yield self.header() + + percent = 100 * cluster_master.tell_sum() / cluster_master.size() + if percent < 100: + yield self.draw_progressbar(100 * cluster_master.tell_sum() / cluster_master.size()) + + yield """<table id="mytable" cellspacing="0" summary=""> +<caption>Generated by sos-logs2html 1.0 on %s</caption> +""" % (time.strftime("%B %d %H:%M:%S")) + + line = 0 + prev_date = None + prev_host = None + + results = myDB.execute_and_fetch("""select eid, parser, date, host, message, css_style, count(message) as count_m from events group by date, host, message order by date, host""") + + html_row = {} + + for row in results: + + date = time.localtime(row["date"]) + + if prev_date and prev_date != date: + + if line == 0 or line % 200 == 0: + yield """<tr><th scope="col" abbr="Date/Time" class="nobg" style="width: 100px">Time</th>""" + + for host in cluster.host_names(): + yield """<th scope="col" abbr="%s">%s</th>""" % (host, host) + + yield """</tr>""" + + if line == 0 or line % 200 == 0 or time.strftime("%b %d", prev_date) != time.strftime("%b %d", prev_prev_date): + yield("""<tr><th scope="row" class="newday" colspan=%d>%s</th></tr>""" % (len(cluster.hosts) + 1, time.strftime("%A, %B %d", prev_date))) + + if line % 2 == 0: row_class = "spec" + else: row_class = "specalt" + + color_shades = [(181,193,255), (76,102,236), (255,191,100), (255,232,200)] + color_shades.append(color_shades[0]) + + if prev_date[3] in range(0, 6): + shade_idx, shade_div = 0, 6 + elif prev_date[3] in range(6, 12): + shade_idx, shade_div = 1, 12 + elif prev_date[3] in range(12, 18): + shade_idx, shade_div = 2, 18 + elif prev_date[3] in range(18, 24): + shade_idx, shade_div = 3, 24 + + color_hour = rgb_to_hex(color_gradient(color_shades[shade_idx], color_shades[shade_idx+1], (prev_date[3] + (prev_date[4]/60)) * 100 / shade_div)) + + yield("""<TR><th scope="row" class="%s" style="background-color: #%s"><a style="font-weight:normal;color:black;font-size:larger" href="/goto/%s">%s</a></th>""" % (row_class, color_hour, time.strftime("%Y%m%d%H%M%S", prev_date), time.strftime("%H:%M:%S", prev_date))) + + tab = 0 + while tab < len(cluster.host_names()): + yield "<td><ul>" + if html_row.has_key(tab): + for out in html_row[tab]: + yield "<li>" + out + "</li>" + yield "</ul></td>" + tab+=1 + + line += 1 + + html_row = {} + prev_prev_date = prev_date + + if not html_row.has_key(cluster.host_names().index(row["host"])): + html_row[cluster.host_names().index(row["host"])] = [] + + toadd = '<a href="javascript:void(0);"' + toadd+= ' name="sample%d"' % line + toadd+= ' id="sample" style="cursor:pointer;%s"' % row["css_style"] + toadd+= """ onclick="overlib(OLiframeContent('/event_tooltip?eid=%d', 510, 145, 'if1', 0, 'auto'), TEXTPADDING,6, CAPTION,'Event #%d - %s',""" % (row["eid"], row["eid"], row["message"]) + toadd+= """ SCROLL, STICKY, BASE,2, REF,'sample%d', REFC,'UR', REFX,10, REFY,-25,""" % line + toadd+= """ DRAGGABLE, SHADOW, SHADOWX,3, SHADOWY,3, STATUS,'Example of Secondary Popups');" onmouseout="nd(); return false;">%s</a>""" % row["message"] + + if row["count_m"] > 1: + toadd+= " (repeated %d times)" % row["count_m"] + + html_row[cluster.host_names().index(row["host"])].append(toadd) + + prev_date = date + + if not len(results): + yield """<tr><td>No event logged yet, click <a href="/browse">here</a> to start viewing the logs or <a href="/">refresh this page</a>.</td></tr>""" + + yield "</table>" + + yield self.footer() + + def event_tooltip(self, eid): + cluster = cluster_master.instance() + + results = myDB.execute_and_fetch("""select eid, host, position, parser, message from events where eid = %d""" % int(eid)) + + yield """<html><body>""" + + for row in results: + line = cluster.get_host(row["host"]).seek_and_read(row["position"]) + + parser = cluster.get_parser(row["parser"]) + yield parser.analyse_line(log_line_class(None, row["host"], row["position"], line)) + + yield """</body></html>""" + + cherrypy.config.update({'logDebugInfoFilter.logBuildTime': False}) + cherrypy.config.update({'logDebugInfoFilter.logPageSize': False}) + + def navigation(self): + yield """<a href="/previous">Previous</a> <a href="/next">Next</a>""" + + def previous(self): + cluster = cluster_master.instance() + dates = ksort(cluster.index) + idx = dates.index(cherrypy.session.get('first_date_on_page')) + idx = idx - cherrypy.session.get('dates_per_page') + if idx < 0: idx = 0 + cherrypy.session['position'] = cluster.get_position_by_date(dates[idx]) + raise cherrypy.HTTPRedirect('/browse') + + def next(self): + cluster = cluster_master.instance() + cherrypy.session['position'] = cluster.get_position_by_date(cherrypy.session.get('last_date_on_page')) + raise cherrypy.HTTPRedirect('/browse') + + def _goto(self, goto_date): + cluster = cluster_master.instance() + + try: + cherrypy.session['position'] = cluster.get_position_by_date(time.strptime(goto_date, "%Y%m%d%H%M%S")) + except: + # some other exception, redirect to / + raise cherrypy.HTTPRedirect('/browse') + + yield self.browse() + + def default(self, url, value): + if url == "goto": + yield self._goto(value) + + index.exposed = True + browse.exposed = True + previous.exposed = True + next.exposed = True + event_tooltip.exposed = True + default.exposed = True + +class Filters: + def index(self): + + cluster = cluster_master.instance() + + filter_daemons = cherrypy.session.get('filter_daemons', []) + + yield cherrypy.root.header() + + # Daemons to filter out + # + + yield """<DIV>Filter out the following daemons from the output""" + + yield """<FORM action="update_filters" method="POST">""" + + yield """<SELECT STYLE="width: 200px" MULTIPLE="true" SIZE=10 NAME="daemons">""" + for daemon, occurs in cluster.daemon_log_counter: + if daemon in filter_daemons: continue + yield """<OPTION VALUE="%s">%s (%d lines)""" % (daemon, daemon, occurs) + yield """</SELECT>""" + + yield """<SELECT STYLE="width: 200px" MULTIPLE="true" SIZE=10 NAME="daemons_ex">""" + for daemon in filter_daemons: + yield """<OPTION VALUE="%s">%s""" % (daemon, daemon) + yield """</SELECT>""" + + yield """<INPUT TYPE="submit" VALUE="Update">""" + + yield """</FORM>""" + + yield """</DIV>""" + + yield cherrypy.root.footer() + + def update_filters(self, daemons = None, daemons_ex = None): + filter_daemons = cherrypy.session.get('filter_daemons', []) + + if daemons: + if type(daemons) == str: + filter_daemons.append(daemons) + else: + for daemon in daemons: + filter_daemons.append(daemon) + + if daemons_ex: + if type(daemons_ex) == str: + filter_daemons.remove(daemons_ex) + else: + for daemon in daemons_ex: + filter_daemons.remove(daemon) + + cherrypy.session['filter_daemons'] = filter_daemons + + raise cherrypy.HTTPRedirect('/') + + index.exposed = True + update_filters.exposed = True + +def usage(): + print "ciao" + +try: + opts, args = getopt.getopt(sys.argv[1:], "hve:", ["help", "input="]) +except getopt.GetoptError: + # print help information and exit: + usage() + sys.exit(2) + +cmdline = {} +cmdline["exclude_regex"] = [] +cmdline["include_regex"] = [] +cmdline["verbose"] = 0 + +for o, a in opts: + if o == "-v": + cmdline["verbose"] += 1 + if o in ("-h", "--help"): + usage() + sys.exit() + if o in ("-e", "--exclude-regex"): + cmdline["exclude_regex"].append(re.compile(a)) + if o in ("-i", "--include-regex"): + cmdline["include_regex"].append(re.compile(a)) + +if __name__ != "__main__": + sys.exit() + +myDB = soshtmllogs.database.myDB_class() + +cluster_master = cluster_class() + +sys.stderr.write("adding logs\n") +for log in args: + cluster_master.add_log(log) + +from soshtmllogs.parsers.simple_parser import * +from soshtmllogs.parsers.dmapper_parser import * +from soshtmllogs.parsers.crazyclock_parser import * + +cluster_master.register_parser(simple_Parser(cluster_master, myDB)) +cluster_master.register_parser(dmapper_Parser(cluster_master, myDB)) +#cluster_master.register_parser(crazyclock_Parser(cluster_master, myDB)) + +cluster_master.parse(threaded = True) + +sys.stderr.write("finished adding logs\n") + +if len(cluster_master.hosts) == 0: + sys.stderr.write("no valid data to parse was found. exiting.\n") + sys.exit(1) + +cherrypy.root = Root() +cherrypy.root.filters = Filters() +cherrypy.config.update({'session_filter.on': True}) +cherrypy.config.update({'autoreload.on': False}) +#cherrypy.config.update({'server.environment': "production"}) + +cherrypy.config.update({ + "/":{'static_filter.root': "/usr/share/sos-html-logs"}, + "/overlib":{'static_filter.on': True, "static_filter.dir":"html/overlib"} +}) + +cherrypy.server.start() + diff --git a/src/extras/sysreport/functions b/src/extras/sysreport/functions index 74061d18..fff52ccd 100755 --- a/src/extras/sysreport/functions +++ b/src/extras/sysreport/functions @@ -48,14 +48,14 @@ getpciinfo() { catiffile() { if [ -d $1 ]; then - /bin/cp -x --parents -R $1 $ROOT 2>>$ROOT/$log + /bin/cp -p -x --parents -R $1 $ROOT 2>>$ROOT/$log find $ROOT/$1 -type b -o -type c | xargs rm -f 2>/dev/null || : echo -n $STATUS echo_success return 1 fi if [ -f $1 ]; then - /bin/cp --parents $1 $ROOT 2>>$ROOT/$log + /bin/cp -p --parents $1 $ROOT 2>>$ROOT/$log echo -n $STATUS echo_success return 1 diff --git a/src/extras/sysreport/sysreport.legacy b/src/extras/sysreport/sysreport.legacy index 4a41f803..043ba026 100755 --- a/src/extras/sysreport/sysreport.legacy +++ b/src/extras/sysreport/sysreport.legacy @@ -13,6 +13,7 @@ umask 0077 UTILDIR=/usr/share/sysreport VER=`/bin/uname -r` PATH="" +PROGNAME="sysreport" DATE=`/bin/date -u +%G%m%d%k%M%S | /usr/bin/tr -d ' '` function usage { @@ -26,17 +27,24 @@ function usage { echo " -help : show help" echo " -norpm : omit collecting information about currently installed packages" echo " -dmidecode: enable dmidecode, getting information about the hardware" + echo " -firewall : collecting the system firewall rules" + echo " -home : place sysreport outputs within home directory" + echo " -usesysrq : collecting information about sysrq-trigger" echo exit 0 } -[ $# -lt 3 ] || usage +[ $# -lt 6 ] || usage for i do case "$i" in -help) usage;; -norpm) NORPM=yes;; -dmidecode) DMIDECODE=yes;; + -firewall) FIREWALL=yes;; + -home) HOMEDIR=yes;; + -sysrq) SYSRQ_TRIGGER=yes;; + -usesysrq) SYSRQ_TRIGGER=yes;; *) usage;; esac done @@ -52,8 +60,15 @@ if [ $UID != 0 ]; then exit 1 fi -ROOT=$HOME/sysreport-$DATE -if ( ! mkdir $ROOT >& /dev/null ) ; then +if [ "$HOMEDIR" = yes ] ; then + TEMPDIR=$HOME + ROOT=$HOME/sysreport-$DATE + /bin/mkdir $ROOT >& /dev/null +else + TEMPDIR=/tmp + ROOT=`/bin/mktemp -dq /tmp/sysreport.XXXXXXXX` +fi +if [ $? != 0 ] ; then echo "Cannot make temp dir" exit 1 fi @@ -197,7 +212,7 @@ STATUS="Collecting information about X:" catiffile "/etc/X11" STATUS="Gathering sysctl information (/proc/sys):" -catiffile "/proc/sys" +catifexec "/sbin/sysctl" "-a" STATUS="Gathering sysctl information (/etc/sysctl.conf):" catiffile "/etc/sysctl.conf" @@ -380,6 +395,9 @@ catiffile "/etc/auto.net" STATUS="Collecting LVM information:" catifexec "/usr/sbin/vgdisplay" "-vv" +STATUS="Gathering LVM setup" +catiffile "/etc/lvm" + STATUS="Collecting SCSI Tape information (/etc/stinit.def)" catiffile "/etc/stinit.def" @@ -424,23 +442,25 @@ done STATUS="Collecting information about ypbind configuration:" catiffile "/etc/yp.conf" -KERNELMIN=`/bin/uname -r | /bin/sed -e 's,[^\.]*\.,,' -e 's,\..*,,'` -ipchainsmod=`/sbin/lsmod 2>/dev/null| /bin/grep ipchains` - -if [ "$KERNELMIN" -lt 3 ] || [ -n "${ipchainsmod}" ] ; then - STATUS="Getting ipchains information:" - catifexec "/sbin/ipchains" "-nvL" -elif [ "$KERNELMIN" -gt 3 ]; then - STATUS="Getting iptables information:" - if [ -f /etc/sysconfig/iptables-config ] ; then - catiffile "/etc/sysconfig/iptables-config" +if [ "$FIREWALL" == "yes" ]; then + KERNELMIN=`/bin/uname -r | /bin/sed -e 's,[^\.]*\.,,' -e 's,\..*,,'` + ipchainsmod=`/sbin/lsmod 2>/dev/null| /bin/grep ipchains` + + if [ "$KERNELMIN" -lt 3 ] || [ -n "${ipchainsmod}" ] ; then + STATUS="Getting ipchains information:" + catifexec "/sbin/ipchains" "-nvL" + elif [ "$KERNELMIN" -gt 3 ]; then + STATUS="Getting iptables information:" + if [ -f /etc/sysconfig/iptables-config ] ; then + catiffile "/etc/sysconfig/iptables-config" + fi + STATUS="Getting iptables information (filter):" + catifexec "/sbin/iptables" "-t filter -nvL" + STATUS="Getting iptables information (mangle):" + catifexec "/sbin/iptables" "-t mangle -nvL" + STATUS="Getting iptables information (nat):" + catifexec "/sbin/iptables" "-t nat -nvL" fi - STATUS="Getting iptables information (filter):" - catifexec "/sbin/iptables" "-t filter -nvL" - STATUS="Getting iptables information (mangle):" - catifexec "/sbin/iptables" "-t mangle -nvL" - STATUS="Getting iptables information (nat):" - catifexec "/sbin/iptables" "-t nat -nvL" fi # ldap client and server config @@ -583,23 +603,22 @@ for x in `/bin/ls -d /etc/cups/*.conf 2>/dev/null` ; do catiffile "$x" done -STATUS="Getting information about printcap" -catiffile "/etc/printcap" - echo echo "Gathering information from system logs" echo STATUS="Collecting information from dmesg:" catiffile "/var/log/dmesg" -STATUS="Collecting information from /proc/sysrq-trigger" -if [ -f /proc/sysrq-trigger -a -f /proc/sys/kernel/sysrq ] ; then - sysr_state="$(/bin/cat /proc/sys/kernel/sysrq)" - echo 1 > /proc/sys/kernel/sysrq - for key in m p t ; do - echo $key > /proc/sysrq-trigger - done - echo $sysr_state > /proc/sys/kernel/sysrq +if [ "$SYSRQ_TRIGGER" == "yes" ]; then + STATUS="Collecting information from /proc/sysrq-trigger" + if [ -f /proc/sysrq-trigger -a -f /proc/sys/kernel/sysrq ] ; then + sysr_state="$(/bin/cat /proc/sys/kernel/sysrq)" + echo 1 > /proc/sys/kernel/sysrq + for key in m p t ; do + echo $key > /proc/sysrq-trigger + done + echo $sysr_state > /proc/sys/kernel/sysrq + fi fi for x in `/bin/ls /var/log/messages*` ; do @@ -683,6 +702,7 @@ if [ -f $RHNDIR/systemid ] ; then catiffile "$RHNDIR/systemid" fi fi + # Get hardware profile information (for verification with system state and RHN) if [ -x /usr/share/rhn/up2date_client/hardware.py ] ; then STATUS="Gathering RHN hardware profile information" @@ -697,6 +717,7 @@ if [ -x /usr/bin/rhn-charsets ] ; then catifexec "/usr/bin/rhn-charsets" fi +# Get SELinux information echo echo "Gathering information on SELinux setup" echo @@ -705,14 +726,25 @@ catifexec "/usr/sbin/sestatus" catifexec "rpm" "-q -V selinux-policy-targeted" catifexec "rpm" "-q -V selinux-policy-strict" -cd $HOME +cd $TEMPDIR /bin/echo /bin/echo -n "Please enter your case number (if you have one): " -read CASENUM + +while read CASENUM +do + case $CASENUM in + *[^0-9]*) + /bin/echo -e "\nError: Your input contains non-numeric characters!" + /bin/echo -e "Please enter your case number (if you have one): " + ;; + *) + break ;; + esac +done if [ ! $CASENUM ]; then - NAME=$HOSTNAME.$DATE + NAME=$PROGNAME-$HOSTNAME.$DATE else - NAME="$HOSTNAME-$CASENUM.$DATE" + NAME="$PROGNAME-$HOSTNAME-$CASENUM.$DATE" fi /bin/rm -Rf $NAME /bin/mv $ROOT $NAME @@ -727,7 +759,7 @@ fi /bin/rm -Rf $NAME /bin/echo -/bin/echo "Please send $HOME/${NAME}.${SUFFIX} to your support" +/bin/echo "Please send $TEMPDIR/${NAME}.${SUFFIX} to your support" /bin/echo "representative." /bin/echo |