﻿
// BTP site class

if (!HwsjToolbox) var HwsjToolbox = {};
else if (typeof (HwsjToolbox) != 'object')
  throw new Error('HwsjToolbox is not an object!');
  
// Global variables

HwsjToolbox = {
  blurBackgroundColor: '#ffffff',
  blurBorderStyle: '1px solid #7f9db9',
  focusBackgroundColor: '#ffffcc',
  focusBorderStyle: '2px solid #000000'
}

// Date module

HwsjToolbox.Date = {
  NAME: 'Date module',
  VERSION: 1.0,
  
  getDayNum: function(dateValue) {
    return dateValue.getDate();
  },
  
  getJulianNum: function(dateValue) {
    var dayNum = HwsjToolbox.Date.getDayNum(dateValue);
    var julianNum = 0;
    var monthNum = HwsjToolbox.Date.getMonthNum(dateValue);
    var yearNum = HwsjToolbox.Date.getYearNum(dateValue);
    
    for (var i = 1; i < monthNum; i++) {
      julianNum += HwsjToolbox.Date.getNumMonthDays(i, yearNum);
    }
    
    julianNum += dayNum;
    
    return julianNum;
  },
  
  getMonthNum: function(dateValue) {
    return dateValue.getMonth() + 1;
  },
  
  getNumMonthDays: function(monthNum, yearNum) {
    var numMonthDays = 0;
    
    switch (true) {
      case monthNum == 1 || monthNum == 3 || monthNum == 5 || monthNum == 7 || monthNum == 8 ||
          monthNum == 10 || monthNum == 12:
        numMonthDays = 31;
        break;
        
      case monthNum == 4 || monthNum == 6 || monthNum == 9 || monthNum == 11:
        numMonthDays = 30;
        break;
        
      case monthNum == 2:
        numMonthDays = !HwsjToolbox.Date.isLeapYear(yearNum) ? 28 : 29;
    }
    
    return numMonthDays;
  },
  
  getYearNum: function(dateValue) {
    return dateValue.getFullYear();
  },
  
  isLeapYear: function(yearNum) {
    var isLeapYearFlag = false;
    
    switch (true) {
      case yearNum % 400 == 0:
        isLeapYearFlag = true;
        break;
        
      case yearNum % 100 == 0:
        isLeapYearFlag = false;
        break;
        
      case yearNum % 4 == 0:
        isLeapYearFlag = true;
        break;
        
      default:
        isLeapYearFlag = false;
    }
    
    return isLeapYearFlag;
  }
}

// Event module

HwsjToolbox.Event = {
  NAME: 'Event module',
  VERSION: 1.0,

  addEventHandler: function(elementObj, eventType, handlerFunction, capturesFlag) {
    if (elementObj.addEventListener) {
      elementObj.addEventListener(eventType, handlerFunction, capturesFlag);
    }
    else if (elementObj.attachEvent) {
      elementObj.attachEvent('on' + eventType, handlerFunction);
    }
    else {
      elementObj['on' + eventType] = handlerFunction;
    }
  },
  
  getEvent: function(eventObj) {
    return eventObj ? eventObj : window.event;
  },

  getEventTarget: function(eventObj) {
    return eventObj.target || eventObj.srcElement;
  },

  preventDefault: function(eventObj) {
    if (eventObj.preventDefault) {
      eventObj.preventDefault();
    }
    else {
      eventObj.returnValue = false;
    }
  },

  removeEventHandler: function(elementObj, eventType, handlerFunction, capturesFlag) {
    if (elementObj.removeEventListener) {
      elementObj.removeEventListener(eventType, handlerFunction, capturesFlag);
    }
    else if (elementObj.detachEvent) {
      elementObj.detachEvent('on' + eventType, handlerFunction);
    }
    else {
      elementObj['on' + eventType] = null;
    }
  },

  stopPropagation: function(eventObj) {
    if (eventObj.stopPropagation) {
      eventObj.stopPropagation();
    }
    else {
      eventObj.cancelBubble = true;
    }
  }
}

// Form module

HwsjToolbox.Form = {
  NAME: 'Form module',
  VERSION: 1.0,

  blurFormElement: function(eventObj) {
    var elementObj = HwsjToolbox.Event.getEventTarget(eventObj);
    if (elementObj) {
      elementObj.style.border = HwsjToolbox.blurBorderStyle;
      elementObj.style.backgroundColor = HwsjToolbox.blurBackgroundColor;
    }
  },

  focusFormElement: function(eventObj) {
    var elementObj = HwsjToolbox.Event.getEventTarget(eventObj);
    if (elementObj) {
      elementObj.style.border = HwsjToolbox.focusBorderStyle;
      elementObj.style.backgroundColor = HwsjToolbox.focusBackgroundColor;
      
      elementObj.select();
    }
  },

  focusFormElementWithClear: function(eventObj) {
    var elementObj = HwsjToolbox.Event.getEventTarget(eventObj);
    if (elementObj) {
      elementObj.style.border = HwsjToolbox.focusBorderStyle;
      elementObj.style.backgroundColor = HwsjToolbox.focusBackgroundColor;
      
      elementObj.value = '';
    }
  },

  initFormElements: function(useElementTypeStr, focusElementID, clearElementStr) {  
    var clearElementFlag = false;
    
    var clearElementList = new Array();
    if (clearElementStr && clearElementStr != '') clearElementList = clearElementStr.split('|');
    
    var inputElementList = document.getElementsByTagName('input');
    for (var i = 0; i < inputElementList.length; i++) {
      if (useElementTypeStr.indexOf(inputElementList[i].getAttribute('type')) != -1) {
        clearElementFlag = false;
        for (var j = 0; j < clearElementList.length; j++) {
          if (clearElementList[j] && inputElementList[i].id == clearElementList[j]) {
            clearElementFlag = true;
            break;
          }
        }
        
        if (!clearElementFlag) {
          HwsjToolbox.Event.addEventHandler(inputElementList[i], 'focus',
              HwsjToolbox.Form.focusFormElement, false);
        }
        else {
          HwsjToolbox.Event.addEventHandler(inputElementList[i], 'focus',
              HwsjToolbox.Form.focusFormElementWithClear, false);
        }
        
        HwsjToolbox.Event.addEventHandler(inputElementList[i], 'blur',
            HwsjToolbox.Form.blurFormElement, false);
      }
    }
  
    if (focusElementID != '') {
      var focusElementObj = document.getElementById(focusElementID);
      if (focusElementObj) focusElementObj.focus();
    }
  }
}

// String module

HwsjToolbox.String = {
  NAME: 'String module',
  VERSION: 1.0,
  
  fillStringLeft: function(textString, addChar, finalLength) {
    var fillChar = String(addChar);
    var fillString = String(textString);
    var initLength = fillString.length;
    
    if (fillChar != '' && finalLength > initLength) {
      for (var i = initLength; i < finalLength; i++) {
        fillString = HwsjToolbox.String.leftString(fillChar, 1) + fillString;
      }
    }
    
    return fillString;
  },
  
  fillStringRight: function(textString, addChar, finalLength) {
    var fillChar = String(addChar);
    var fillString = String(textString);
    var initLength = fillString.length;
    
    if (fillChar != '' && finalLength > initLength) {
      for (var i = initLength; i < finalLength; i++) {
        fillString += HwsjToolbox.String.leftString(fillChar, 1);
      }
    }
    
    return fillString;
  },
      
  leftString: function(textStr, numChars) {
    var outputStr = String(textStr);
    
    if (numChars <= 0)
      return '';
    else if (numChars >= outputStr.length)
      return outputStr;
    else
      return outputStr.substring(0,numChars);
  },

  rightString: function(textStr, numChars) {
    var outputStr = String(textStr);
    
    if (numChars <= 0)
      return '';
    else if (numChars >= outputStr.length)
      return outputStr;
    else {
      var lenStr = outputStr.length;
      return outputStr.substring(lenStr, lenStr - numChars);
    }
  }
}

// Utility module

HwsjToolbox.Util = {
  NAME: 'Utility module',
  VERSION: 1.0,

  cookiesEnabled: function() {
    var cookieName = 'BTPTestCookie';
    var enabledFlag = false;
  
    this.setCookie(cookieName, 'Yes', '', '');
    if (this.getCookie(cookieName) != null)
      enabledFlag = true;

    return enabledFlag;
  },

  getCookieValue: function(cookieName) {
    var cookieValue;
    var cookieValues = document.cookie;
    var cookieStartsAt = cookieValues.indexOf(' ' + cookieName + '=');

    if (cookieStartsAt == -1)
      cookieStartsAt = cookieValues.indexOf(cookieName + '=');

    if (cookieStartsAt == -1) {
      cookieValue = null;
    }
    else {
      cookieStartsAt = cookieValues.indexOf('=', cookieStartsAt) + 1;
      var cookieEndsAt = cookieValues.indexOf(';', cookieStartsAt);
      if (cookieEndsAt == -1)
        cookieEndsAt = cookieValues.length;

      cookieValue = unescape(cookieValues.substring(cookieStartsAt,cookieEndsAt));
    }

    return cookieValue;
  },

  openWindow: function(pageURL, winName, winOption) { 
    var numArguments = arguments.length;
    var winOptions = '';
   
    for (var i = 3; i <= numArguments; i++) {
      if (winOptions != '') winOptions = winOptions + ',';
      winOptions = winOptions + arguments[i - 1];
    }
 
    window.open(pageURL, winName, winOptions);
  },

  scrollToPageBottom: function() {
    window.scrollBy(0,100000);
  },
  
  setCookieValue: function(cookieName, cookieValue, cookiePath, cookieExpires) {
    cookieValue = escape(cookieValue);
    
    if (cookieExpires == '') {
      var dateToday = new Date();
      dateToday.setMonth(dateToday.getMonth() + 6);
      cookieExpires = dateToday.toUTCString();
    }
    
    if (cookiePath != '') {
      cookiePath = ';Path=' + cookiePath;
    }
    
    document.cookie = cookieName + '=' + cookieValue + ';expires=' + cookieExpires + cookiePath;
  }
}
