﻿var upStatsHost = location.hostname == "localhost" ? "http://localhost/up_stats/" : (location.hostname.indexOf("uplication.com") > -1 || location.hostname.indexOf("xywidgets.com") > -1 ? "http://ustats.uplication.com/" : "http://upstats.si-sv3109.com/");

function $$(id) { return document.getElementById(id); }

function getSelectedRadio(name) {
  var inp = document.getElementsByName(name);
  if (!inp) return;
  for (var i = 0; i < inp.length; i++)
    if (inp[i].checked)
    return inp[i].value;
  return null;
}

function setSelectedRadio(name, value) {
  var inp = document.getElementsByName(name);
  if (!inp) return;
  for (var i = 0; i < inp.length; i++)
    inp[i].checked = inp[i].value == value;    
}

var enc = encodeURIComponent;

Ajax = function () { }

Ajax.sget = function (url, params, callback, fnCacheBuster) { Ajax.get(url, params, false, callback, fnCacheBuster); }
Ajax.aget = function (url, params, callback, fnCacheBuster) { Ajax.get(url, params, true, callback, fnCacheBuster); }
Ajax.get = function (url, params, async, callback, fnCacheBuster) { Ajax.request("get", url, params, async, callback, fnCacheBuster); }

Ajax.spost = function (url, params, callback, fnCacheBuster) { Ajax.post(url, params, false, callback, fnCacheBuster); }
Ajax.apost = function (url, params, callback, fnCacheBuster) { Ajax.post(url, params, true, callback, fnCacheBuster); }
Ajax.post = function (url, params, async, callback, fnCacheBuster) { Ajax.request("post", url, params, async, callback, fnCacheBuster); }

Ajax.request = function (method, url, params, async, callback, fnCacheBuster) {
  var r = getXMLHttpRequest(), postData = null;
  if (fnCacheBuster === undefined) fnCacheBuster = getDateTimeString;
  if (fnCacheBuster !== null) url += '&cdt=' + fnCacheBuster();
  r.open(method, url, async);
  if (method == "post") Ajax.setHeader(r, "Content-Type", "application/x-www-form-urlencoded");
  if (params) {
    switch (method) {
      case "get": for (var paramName in params) Ajax.setHeader(r, paramName, params[paramName]); break;
      case "post": postData = Ajax.getPostData(params); break;
    }
  }
  if (async && callback) r.onreadystatechange = function () { if (r.readyState == 4) callback(r.responseText, r); }
  r.send(postData);
  if (!async && callback) callback(r.responseText, r);
}
Ajax.getPostData = function (params) {
  var a = [];
  for (var paramName in params) a.push([enc(paramName), '=', enc(params[paramName])].join(''));
  return a.join('&');
}
Ajax.setHeader = function (r, name, value) {
  r.setRequestHeader(enc(name), enc(value));
}

function getXMLHttpRequest() {
  try { return new XMLHttpRequest(); }
  catch (e) { return new ActiveXObject("Microsoft.XMLHTTP"); }
}

function isAllSameChar(inputString, charCode) {
  if ((typeof (inputString) != "string") || (inputString.length == 0)) return false;
  for (var i = 0; i < inputString.length; i++) if (inputString.charCodeAt(i) != charCode) return false;
  return true;
}

function stringEmpty(inputString) {
  if (isIE()) return ((inputString == null) || isAllSameChar(inputString, 32) || ((typeof (inputString) == "string") && (inputString.length == 0)));
  if (!inputString || !inputString.length) return true;
  for (var i = 0; i < inputString.length; i++)
    if ((escape(inputString[i]) != "%0A") && (escape(inputString[i]) != "%20")) return false;
  return true;
}

function isNumber(input) {
  var ch;
  var dotCnt = 0;
  var isNum = true;

  if (typeof (input) == "number") return true;
  if (typeof (input) != "string") return false;
  if ((input.length == 0) || isAllSameChar(input, 32) ||
		    (input.charAt(input.length - 1) == '.')) return false;
  for (var i = 0; i < input.length; i++) {
    ch = input.charAt(i);
    if (ch == '.') {
      dotCnt++;
      isNum = (dotCnt < 2);
    }
    else isNum = (((i == 0) && (ch == '-')) || !isNaN(parseInt(ch)));
    if (!isNum) break;
  }
  return isNum;
}

function getLeft(obj, container) {
  var contWidth = 0;
  var width = parseInt(obj.style.width);
  var cont = (container ? container : top.document.body);

  if (isNaN(width)) width = obj.clientWidth;
  if (width == 0) width = obj.offsetWidth;
  if ((cont.style.width) && (cont.style.width.indexOf('%') == -1)) contWidth = parseInt(cont.style.width);
  if (isNaN(contWidth) || (contWidth == 0)) contWidth = cont.clientWidth;
  if (contWidth == 0) contWidth = cont.offsetWidth;
  return (contWidth - width) / 2 + "px";
}

function getIframe(ifrName) {
  var col = document.getElementsByTagName("iframe");
  for (var i = 0; i < col.length; i++)
    if (col[i].name == ifrName || col[i].id == ifrName) return window.frames[i];
  return null;
}

function getSrcElement(evt) {
  if (evt)
    return evt.srcElement != undefined ? evt.srcElement : evt.target != null ? evt.target : evt.currentTarget != null ? evt.currentTarget : top.srcElem;
  return top.srcElem ? top.srcElem : null;
}

function click(elem, bubble) {
  if (elem.dispatchEvent != undefined) {
    if (elem.tagName.toLowerCase() == "input" &&
                (elem.type.toLowerCase() == "submit" ||
                 elem.type.toLowerCase() == "button")) elem.click();
    else {
      var clickevent = document.createEvent("MouseEvents");

      clickevent.initEvent("click", bubble == undefined || bubble, true);
      elem.dispatchEvent(clickevent);
    }
  }
  else elem.click();
}

function isIE() {
  return window.navigator.appName.toLowerCase().indexOf('explorer') > -1;
}

function addOption(select, option) {
  if ((select.tagName.toLowerCase() == "select") && (option.tagName.toLowerCase() == "option")) {
    if (isIE()) select.options.add(option);
    else select.add(option, null);
  }
}

function removeOption(select, index) {
  if (select.tagName.toLowerCase() == "select") {
    if (isIE()) select.options.remove(index);
    else select.remove(index);
  }
}

function getKeyCode(evt) {
  return evt.which ? evt.which : evt.keyCode;
}

function getValue(childNodes) {
  var i = 0;
  while (i < childNodes.length && childNodes[i].value == undefined) i++;
  return i < childNodes.length ? childNodes[i].value : null;
}

function getPrevSibling(node) {
  if (!node) return null;
  do {
    node = node.previousSibling;
  } while (node && node.nodeType != 1)
  return node;
}

function getNextSibling(node) {
  if (!node) return null;
  do {
    node = node.nextSibling;
  } while (node && node.nodeType != 1)
  return node;
}

function getChildNode(node, index, returnTable) {
  if (!node || node.childNodes.length == 0) return null;
  var child = node.childNodes[0];
  if (!returnTable && _tagName(child) == "table" && node.childNodes.length == 1 && index < child.rows.length) {
    return child.rows[index].cells[0].childNodes[0];
  }
  if (returnTable) {
    var i = 0;
    var j = -1;
    while (j < index && i < node.childNodes.length) {
      if (_tagName(node.childNodes[i]) == "table") j++;
      if (j < index) i++;
    }
    return j == index ? node.childNodes[i] : null;
  }
  else {
    if (!index) return child.nodeType == 1 ? child : getNextSibling(child);
    var i = child.nodeType == 1 ? 0 : -1;
    while (i < index && i < node.childNodes.length) {
      child = getNextSibling(child);
      i++;
    }
    return i == index ? child : null;
  }
}

function getChildNodesLength(childNodes) {
  if (!childNodes) return -1;
  var len = 0;
  for (var i = 0; i < childNodes.length; i++)
    if (childNodes[i].nodeType == 1) len++;
  return len;
}

function addEvent(obj, eventName, handler) {
  if (obj != null) {
    eventName = eventName.toLowerCase();
    if (window.attachEvent)
      obj.attachEvent((eventName.indexOf("on") != 0 ? "on" : "") + eventName, handler);
    else
      obj.addEventListener(eventName.indexOf("on") == 0 ? eventName.substr("on".length) : eventName, handler, false);
  }
}

function stopPropagation(evt) {
  if (evt) isIE() ? evt.cancelBubble = true : evt.stopPropagation();
}

function isNull(n, def) { return !n || isNaN(n) ? def : n; }

function isDateValid(DD, MM, YYYY, yDiff) {
  var isValid = false;
  var dt = new Date();
  var y = dt.getFullYear();
  var dd = isNull(DD, -1);
  var mm = isNull(MM, -1);
  var yyyy = isNull(YYYY, -1);
  var yd = isNull(yDiff, 0);

  if (yyyy > 50 && yyyy <= 99) yyyy += 1900;
  else if (yyyy >= 0 && yyyy <= 50) yyyy += 2000;

  isValid = (dd && (dd > -1) && mm && (mm > -1) && yyyy && (yyyy > -1));
  if (isValid) {
    if ((dd <= 0) || (dd > 31) || (mm <= 0) || (mm > 12) || (yyyy > y - yd)) isValid = false;
    else if ((dd > 28) && (dd <= 31)) {
      if (dd == 31) isValid = ((mm == 1) || (mm == 3) || (mm == 5) || (mm == 7) || (mm == 8) || (mm == 10) || (mm == 12))
      else if (dd == 29) isValid = ((mm != 2) || (yyyy % 4 == 0))
    }
    else isValid = true;
  }
  return isValid;
}

function isTimeValid(hh, mm, ss) {
  hh = isNull(hh, 0);
  mm = isNull(mm, 0);
  ss = isNull(ss, 0);
  return hh >= 0 && hh < 24 && mm >= 0 && mm < 60 && ss >= 0 && ss < 60;
}

function isValidEmail(input) {
  var ch, inp = "";
  var atPassed = false;
  var dotAfterAt = false;
  var isValidChar = true;
  var atCnt = 0;

  if (typeof (input) == "string") inp = input;
  else if (input.value) inp = input.value;
  else if (input.innerText) inp = input.innerText;
  else if (input.innerHTML) inp = input.innerHTML;
  inp = inp.split('~')[0];
  for (var i = 0; i < inp.length; i++) {
    ch = inp.charAt(i);
    if (((i == 0) || (i == inp.length - 1)) && ((ch == '@') || (ch == '.'))) {
      isValidChar = false;
      break;
    }
    if ((ch !== '@') && (ch != '.')) isValidChar = isValidEmailChar(ch, i);
    if (!isValidChar) break;
    if (ch == '@') {
      atPassed = true;
      atCnt++;
      if (atCnt > 1) break;
    }
    if (atPassed && !dotAfterAt) dotAfterAt = (ch == '.');
  }
  return (atPassed && dotAfterAt && isValidChar && (atCnt == 1));
}

function isValidEmailChar(ch, index) {
  if ((typeof (ch) == "string") && (ch.length > 0)) {
    ch = ch.charAt(0);
    return (((ch >= '0') && (ch <= '9')) ||
                ((ch >= 'A') && (ch <= 'Z')) ||
                ((ch >= 'a') && (ch <= 'z')) ||
                (index && (index > 0) && ((ch == '-') || (ch == '_'))));
  }
  return (typeof (ch) == "number");
}

function isValidIL_IDN(input) {
	if (!input) return false;
	var ix = input.indexOf("*");
	if (ix > -1) {
		if (ix < input.length - 1) return false;
		input = input.substr(0, input.length - 1);
	}
  if (input.length > 9) return false;
  
  for (var i = 0; i < input.length; i++) if (input[i] < '0' || input[i] > '9') return false;
  while (input.length < 9) input = '0' + input;

  var m;
  var sum = 0;
  for (var i = 0; i < input.length; i++) {
    m = parseInt(input.charAt(i)) * (i % 2 + 1);
    m = Math.floor(m / 10) + m % 10;
    sum += m;
  }
  return sum % 10 == 0;
}

function returnFalse() { return false; }

function addFloat(number, addition) {
  if (!isNaN(parseFloat(number)) && !isNaN(parseFloat(addition))) {
    var sNum = number.toString();
    var sAdd = addition.toString();
    var numDotPos = getCharPos('.', sNum);
    var addDotPos = getCharPos('.', sAdd);
    var numFracLen, addFracLen, maxFracLen, sum;

    if (numDotPos < 0) numFracLen = 0;
    else numFracLen = sNum.length - numDotPos - 1;
    if (addDotPos < 0) addFracLen = 0;
    else addFracLen = sAdd.length - addDotPos - 1;
    maxFracLen = Math.max(numFracLen, addFracLen);
    if (numFracLen < maxFracLen) for (var i = 0; i < maxFracLen - numFracLen; i++) sNum += '0';
    else if (addFracLen < maxFracLen) for (var i = 0; i < maxFracLen - addFracLen; i++) sAdd += '0';
    sNum = removeChar('.', sNum);
    sAdd = removeChar('.', sAdd);
    sum = parseFloat(sNum) + parseFloat(sAdd);
    for (var i = 0; i < maxFracLen; i++) sum = sum / 10;
    return sum;
  }
  return number;
}

function roundFloat(number, digitsAfterZero)
{
  var pos;
  var f = Math.floor(number);
  var r = number - f;

  if (r > 0)
  {
    if (!digitsAfterZero) digitsAfterZero = 2;
    r = r.toString();
    pos = r.indexOf('.');
    return f + '.' + r.substr(pos + 1, digitsAfterZero)
  }
  return number;
}

function getFloat(val, defVal) {
	var retVal = parseFloat(val);

	if (isNaN(retVal)) retVal = defVal;
	if (isNaN(retVal)) retVal = 0;
	return retVal;
}

function getInt(val, defVal) {
	var retVal = parseInt(val);

	if (isNaN(retVal)) retVal = defVal;
	if (isNaN(retVal)) retVal = 0;
	return retVal;
}

function removeChar(inpCh, str) {
  var ch;
  var retStr = "";

  for (var i = 0; i < str.length; i++) {
    ch = str.charAt(i);
    if (ch != inpCh) retStr += ch;
  }
  return retStr;
}

function getCharPos(inpCh, obj) {
  var ch, str;

  if (typeof (obj) == "number") str = obj.toString();
  if (typeof (obj) != "string") str = "";
  else str = obj;
  for (var i = str.length - 1; i >= 0; i--) {
    ch = str.charAt(i);
    if (ch == inpCh) return i;
  }
  return -1;
}

function getDateTimeString() {
  var d = new Date();
  var retVal = "";

  retVal += d.getFullYear();
  retVal += "+";
  retVal += d.getMonth() + 1;
  retVal += "+";
  retVal += d.getDate();
  retVal += "+";
  retVal += d.getHours();
  retVal += "+";
  retVal += d.getMinutes();
  retVal += "+";
  retVal += d.getSeconds();
  return retVal;
}

function replaceQuotes(input) {
  if (!stringEmpty(input)) {
    var output = "";
    var quotePos = input.indexOf("&quote;");

    if (quotePos < 0) output = input;
    else {
      var inp = input;
      var startPos = 0;

      while (quotePos >= 0) {
        output += inp.substr(startPos, quotePos);
        output += "'";
        startPos = quotePos + 7;
        inp = inp.substr(startPos);
        startPos = 0;
        quotePos = inp.indexOf("&quote;");
      }
      output += inp;
    }
    return output;
  }
  return "";
}

function _tagName(e) {
  return e ? (document.all ? (e.tagName ? e.tagName.toLowerCase() : "") : (e.nodeName ? e.nodeName.toLowerCase() : "")) : "";
}

function getParentNode(e, tagName_) {
  while (e && _tagName(e) != tagName_) e = e.parentNode;
  return e;
}

function tbCreateTrack(widgetType, surferId, name, value, uri, toUserId, userType) {
  var s = document.createElement("script");
  s.src = upStatsHost + "default.aspx?m=toolbarTrack&wt=" + widgetType + "&s=" + surferId + "&nm=" + escape(name) + "&vl=" + escape(value) + "&uri=" + escape(uri) + "&tuid=" + toUserId + "&ut=" + userType + "&_r=" + Math.random();
  s.type = "text/javascript";
  return s;
}
function tbInsertTrack(widgetType, surferId, name, value, uri, toUserId, userType) {
  if (!document.body) return;
  var s = tbCreateTrack(widgetType, surferId, name, value, uri, toUserId, userType);
  document.body.appendChild(s);
}
function track(widgetType, surferId, name, value, uri, toUserId, userType) {
  tbInsertTrack(widgetType, surferId, name, value, uri, toUserId, typeof (userType) == "undefined" ? "clubMember" : userType);
}

function removeUserPic(imgid, defSrc, callback) {
  var r = getXMLHttpRequest();
  r.open("get", callback, true);
  r.onreadystatechange = function() {
    if (r.readyState == 4) {
      var img = document.getElementById(imgid);
      if (img) {
        img.src = defSrc;
        img.width = 100;
        img.height = 100;
        img.style.width = "100px";
        img.style.height = "100px";
        if (img.parentNode.tagName == "A") img.parentNode.href = defSrc;
      }
    }
  }
  r.send(null);
}

function registerHiddenField(name, value) {
  var hf = $$(name);
  if (hf) {
    hf.value = value;
  }
  else {
    hf = document.createElement("input");
    hf.type = "hidden";
    hf.id = hf.name = name;
    hf.value = value;
    document.forms[0].appendChild(hf);
  }
}

function getLinkByText(text) {
  var ls = document.getElementsByTagName("A");
  for (var i in ls) if (ls[i].innerHTML && ls[i].innerHTML.indexOf(text) == 0) return ls[i];
  return null;
}

function rootedPath(path) {
  return (location.hostname == "localhost" ? "/" + location.pathname.split('/')[1] + "/" : "/") + path;
}

function selectTextRange(obj)
{
  if (obj.createTextRange)
  {
    var r = obj.createTextRange();
  
    r.select();
  }
}

function split(input, splitter, howMany)
{
  var retArr = null;
  
  if (input)
  {
    if ((howMany <= 0) || !splitter) retArr = new Array(input);
    else if (!howMany) retArr = input.split(splitter);
    else
    {
      var ch;
      var ix = 0;
      var output = '';
      
      for (var i=0; i<input.length; i++)
      {
        ch = input.substr(i, splitter.length);
        if (ch != splitter) output += ch.charAt(0);
        else
        {
          ix++;
          if (retArr == null) retArr = new Array();
          retArr.push(output);
          output = '';
          if (ix >= howMany)
          {
            retArr.push(input.substr(i + splitter.length, input.length - i - splitter.length));
            break;
          }
          i += splitter.length - 1;
        }
      }
    }
  }
  if (retArr == null) retArr = new Array(input);
  return retArr;
}

function curTop(obj) {
  toreturn = 0;
  while (obj) {
    toreturn += obj.offsetTop;
    obj = obj.offsetParent;
  }
  return toreturn;
}
function curLeft(obj) {
  toreturn = 0;
  while (obj) {
    toreturn += obj.offsetLeft;
    obj = obj.offsetParent;
  }
  return toreturn;
}
function curRight(obj) {
  toreturn = 0;
  var objWidth = obj.offsetWidth;
  while (obj) {
    toreturn += obj.offsetLeft;
    obj = obj.offsetParent;
  }
  return document.documentElement.clientWidth - toreturn - objWidth;
}

var introid = 1;
function moveIntro(type, delta) {
  $$(type + "Intro" + introid).style.display = "none";
  introid += delta;
  $$(type + "Intro" + introid).style.display = "";
}

function setSEO(title, desc, keywords) {
  document.title = title;
  var e = $$("description1");
  if (e) e.content = desc;
  e = $$("keywords1");
  if (e) e.content = keywords;
}

var navIconTooltip = null;
function navIconShowTooltip(relto, tooltip, up) {
  var tt = document.createElement("div");
  if (navIconTooltip) navIconHideTooltip();
  navIconTooltip = tt;
  document.body.appendChild(tt);
  tt.className = "navicontooltip";
  tt.innerHTML = tooltip;
  if (document.body.dir == "rtl") tt.style.right = curRight(relto) + "px";
  else tt.style.left = curLeft(relto) + "px";
  tt.style.top = (up ? curTop(relto) - 20 : curTop(relto) + relto.offsetHeight + 5) + "px";
}

function navIconHideTooltip() {
  if (!navIconTooltip) return;
  document.body.removeChild(navIconTooltip);
  navIconTooltip = null;
}
