//
// options: include both value and display text
// [ {"Value":"value0", "Text":"text0"}, {"Value":"value1", "Text":"text1"} ... ]
//
function createSelectField (name, id, klass, options, klass2, selectedIdx) {
  var selectf = document.createElement('select');
  selectf.setAttribute('id', id);
  selectf.setAttribute('name',name);
  selectf.className = klass;
//  selectf.setAttribute('style', style);
  for (var i=0; i<options.length; i++) {
    var soption = document.createElement('option');
        soption.className = klass2;
		soption.title = options[i]['Text'];
        soption.setAttribute('value', options[i]['Value']);
        soption.appendChild(document.createTextNode(options[i]['Text'].substring(0,48)));
    selectf.appendChild(soption);
  }
  if (selectedIdx && selectedIdx > 0)
  	selectf[selectedIdx].selected = true;
  return selectf;
}


function changeHrefTextValue(href, toValue)
{
	var cs = href.childNodes;
	for (var i = 0; i < cs.length; i++) {
		if (cs[i].nodeType == 3 ) {
			cs[i].nodeValue = toValue;
			break;
		}
	}
}

// To prevent double-submit.
function disableAllSubmit(myButton)
{
  var f = myButton.form;
  for(var i = 0; i < f.elements.length; i++) {
        var ee = f.elements[i];
        if (ee.type == 'submit') {
			myLogger.log("::disableAllSubmit disable " + ee.name + "\n");
			ee.disabled = true;
        }
  }
}

function enableAllSubmit(f)
{
  for(var i = 0; i < f.elements.length; i++) {
        var ee = f.elements[i];
        if (ee.type == 'submit') {
			myLogger.log("::enableAllSubmit enable " + ee.id);
	        ee.disabled = false;
        }
  }
}

// Restore the submit buttons in the form to the status before invoking disableAllSubmit
// and createSubmitButton
function restoreFormSubmits(myButton)
{
  var f = myButton.form;
  removeEventSubmit_Buttons(f);
  enableAllSubmit(f);
}

// To prevent double-submit. This creates a hidden input field to fool
// turbine servlet so the name should be in the format of doXXX,
// value should NOT be null.
function createEventSubmit_Button(f, name, value)
{
  var submitButton = document.createElement('input');
  submitButton.setAttribute('type', 'hidden');
  submitButton.setAttribute('name', 'eventSubmit_' + name);
  submitButton.setAttribute('id', 'eventSubmit_' + name);
  submitButton.setAttribute('value', value);
  myLogger.log("::createSubmitButton create " + submitButton.name);
  f.appendChild(submitButton);
}
// To remove the all the submit button with id prefixed as 'eventSubmit_'
function removeEventSubmit_Buttons(f)
{
  var prefixLength = 'eventSubmit_'.length;
  for(var i = 0; i < f.elements.length; i++) {
        var ee = f.elements[i];
        if (ee.type == 'submit' && ee.id.substring(0, prefixLength) == 'eventSubmit_') {
			myLogger.log("::removeEventSubmit_Buttons remove " + ee.id );
			f.removeChild(ee);
		}
  }
}

function setOpacity(obj, opacity) {
  opacity = (opacity == 100)?99.999:opacity;
    // IE/Win
  obj.style.filter = "alpha(opacity:"+opacity+")";
    // Safari<1.2, Konqueror
  obj.style.KHTMLOpacity = opacity/100;

  // Older Mozilla and Firefox
  obj.style.MozOpacity = opacity/100;

  // Safari 1.2, newer Firefox and Mozilla, CSS3
  obj.style.opacity = opacity/100;
}
function fadeIn(objId,opacity) {
  if (document.getElementById) {
    obj = document.getElementById(objId);
    if (opacity <= 100) {
      setOpacity(obj, opacity);
      opacity += 10; // the level of darkness (100 - high, 0 - low)
      window.setTimeout("fadeIn('"+objId+"',"+opacity+")", 100);
    }
  }
}
/*
UserAgent = function() {
    var u = navigator.userAgent, d = document;
    this.ie = typeof d.all != "undefined";
    this.ns4 = typeof d.layers != "undefined";
    this.dom = typeof d.getElementById != "undefined";
    this.safari = /Safari/.test(u);
    this.moz = /Gecko/.test(u) && !this.safari;
    this.mie = this.ie && /Mac/.test(u);
    this.win9x = /Win9/.test(u) || /Windows 9/.test(u);
    this.o7 = /Opera 7/.test(u);
    this.supported = (typeof d.write != "undefined")
                     && (this.ie || this.ns4 || this.dom);
};
*/

function MyLogger () {
   this.ie= typeof document.all != 'undefined';
   this.debugWindow = null;
   this.ns6=document.getElementById&&!document.all
   // set the flag to true if in debug mode.
   this.flag = false;
   this.inited = false;
   //this.init();
}
MyLogger.prototype.init = function() {
 if (this.flag) {
  if (this.ie) {
   this.debugWindow = window.open("","debugWin","toolbar=no,scrollbars=yes,width=500,height=600");
   this.debugWindow.document.writeln("start debugging...");
  }
 }
 this.inited = true;
}
MyLogger.prototype.log = function(msg){
  if (this.flag) {
    if (this.ie) {   if (null==this.debugWindow)	this.init();
      this.debugWindow.document.writeln(msg);
      this.debugWindow.document.writeln('<br>');
    }
    else {
      dump(msg + "\n");
    }
  }
}
var myLogger = new MyLogger();
//myLogger.flag = true;
myLogger.init();

var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var days = new Array("Su", "Mo", "Tu", "We", "Th", "Fr", "Sa");

function getSingleSelectValue(selectf) {
 if (typeof(selectf)!=undefined)
  return selectf[selectf.selectedIndex].value;
 else
  return "";
}

function keepDecimal (number, decimal) {
  return (new Number(number)).toFixed(decimal);
}

function stepDay(now, nrOfDays) {
 var ret = new Date();
 ret.setTime(now.getTime() + nrOfDays * 24 * 60 * 60 * 1000);
 return ret;
}

function checkLeapYear(theyear) {
        // 1.Years divisible by four are leap years, unless...
        // 2.Years also divisible by 100 are not leap years, except...
        // 3.Years divisible by 400 are leap years.

        if ( ((theyear % 4 == 0) && (theyear % 100 != 0)) || (theyear % 400 == 0) ) {
                return("29");
        } else {
                return("28");
        }
}

function open_window(url,width, height, resize, scroll) {
        child = window.open(url,"newwindow", "width=" + width + ",height=" + height + ",resizable=" + resize + ",scrollbars=" + scroll + "");
}

function makeDate(year, mo, date) {
var dd=months[mo]+ " " + date + ", " + year;
return new Date(dd);
}

function getWeekDay(year,mo,date) {
var dd=months[mo]+ " " + date + ", " + year;
dd=new Date(dd);
return dd.getDay();
}

function daysBetween(d1, d2) {
 var DSTAdjust=0;
 oneMinute = 1000*60;
 var oneDay = oneMinute*60*24;
 d1.setHours(0); d1.setMinutes(0); d1.setSeconds(0);
 d2.setHours(0); d2.setMinutes(0); d2.setSeconds(0);
 if (d2>d1) {
  DSTAdjust = (d2.getTimezoneOffset() - d1.getTimezoneOffset()) * oneMinute;
 }
 else {
  DSTAdjust = (d1.getTimezoneOffset() - d2.getTimezoneOffset()) * oneMinute;
 }
 var diff = Math.abs(d2.getTime() - d1.getTime()) - DSTAdjust;
 return Math.ceil(diff/oneDay);
}

function makeDateStr (year, mo, date) {
  return "" + (mo-0<10? "0"+mo : mo) + (date-0<10? "0"+date:date) + year;
}

function isTodayInRange(year, mo, date, left, right)
{
var now = "" + year + (mo-0<10? "0"+mo : mo) + (date-0<10? "0"+date:date);
if ( now-0 < left-0 || now-0 > right-0)
  return 0;
else
  return 1;
}

function first9(str)
{
 if ( null!=str && str.length < 9) return "";
 else if (null!=str && str.length >=9)
 return str.substring(0,10);
 else return "";
}

//
// For showing tips on the hyperlink/image buttons.
//

function showtip(current,e,text){
 if (document.all||document.getElementById){
  thetitle=text.split('<br>');
  if (thetitle.length>1){
   thetitles='';
    for (var i=0;i<thetitle.length;i++)
      thetitles+=thetitle[i];
    current.title=thetitles;
  }
  else
   current.title=text;
 }
 else if (document.layers){
   document.tooltip.document.write("<layer bgColor='white' style='border:1px solid black;font-size:12px;'>"+text+ '</layer>');
 document.tooltip.document.close();
 document.tooltip.left=e.pageX+5;
 document.tooltip.top=e.pageY+5;
 document.tooltip.visibility="show";
 }
}

function hidetip(){
if (document.layers)
document.tooltip.visibility="hidden";
}


//
// End of For showing tips on the hyperlink/image buttons.
//


//
// Form Validation
//

function isblank(s) {
 for (var i=0; i<s.length; i++)
 {
  var c=s.charAt(i);
  if (c!=' ' && c!='\n' && c!='\t')
   return false;
 }
 return true;
}

// Strip the trailing partial words that exceeds the maxlength
function abbrevEndWords (sentence, maxlength)
{
 var ret = sentence;
 if (sentence) {
   if (sentence.match(/^\s*$/)) ret = 'N/A';
   else if (sentence.length > maxlength) {
     maxlength = maxlength > 3 ? maxlength-3 : maxlength;
   	 for (var i=maxlength; i>0; i--) {
	   var c = sentence.charAt(i);
	   if (c==' ' || c=='\n' || c=='\t')
	   	 break;
	 }
	 ret = sentence.substring(0, i) + '...';
   }
 }
 return ret;
}