

function openWinCenter ( url, vwidth, vheight, strWinName, haveScrollbars ) {

   var objWin;
   var w = vwidth;
   var h = vheight;
   var x = (screen.width - w)/2;
   var y = (screen.height - h)/2;

   objWin = window.open(url, strWinName,  'menubar=no,toolbar=no,location=no,directories=no,status=no,scrollbars='+haveScrollbars+',resizable=yes,width='+w+',height='+h+',left='+x+',top='+y+'')
   if (objWin != null)
      objWin.focus(); // Popop blocker create javascript error (objWin == null)
      
}

function openCalendar ( strAppRoot, objCmbMonth, objCmbDay , frmName)
{
   if ( (objCmbMonth != null && objCmbMonth != "") && (objCmbDay != null && objCmbDay != "") )
      openWinCenter(strAppRoot + 'tools/calendar.aspx?date=' + escape(GetSelected(objCmbMonth)) + '.' + escape(GetSelected(objCmbDay)) + '&cmbMonthName=' + escape(objCmbMonth.name) + '&cmbDayName=' + escape(objCmbDay.name) + '&frmName=' + escape(frmName), '262', '169', 'calendar', 'no');
}

function preloadimages()
{   
   var imgtmp = new Array();   
   for (i=0;i<preloadimages.arguments.length;i++) 
   {      
      imgtmp[i]=new Image();      
      imgtmp[i].src=preloadimages.arguments[i];
   }
}

function SetSelected ( objCmb, strValue ) {
   // Set the current selected item from the Value in a HTML list control
   var i;
   
   for ( i = 0; i < objCmb.length; i++ ) {
      if ( objCmb[i].value == strValue ) {
         objCmb[i].selected = true;
         break;
      }
   }
}


function GetSelected ( objCmb ) {
   // Return the VALUE of the item currently selected in a HTML list control  
   var i;
   var strReturn;
   
   for ( i = 0; i < objCmb.length; i++ ) {
      if ( objCmb[i].selected ) {
         strReturn = objCmb[i].value;
         break;
      }
   }
   
   return strReturn;
}

function GetSelectedText ( objCmb ) {
   // Return the Text of the item currently selected in a HTML list control
   var i;
   var strReturn;
   
   for ( i = 0; i < objCmb.length; i++ ) {
      if ( objCmb[i].selected ) {
         strReturn = objCmb[i].text;
         break;
      }
   }
   
   return strReturn;
}

function ListBoxAddOption(objCmb, strValue, strText)
{  //Add a new Option Line at the end of a Html List Control
   var iToLine   = objCmb.options.length;
   var newOption = new Option();
   newOption.value = strValue;
   newOption.text  = strText;
   objCmb.options[iToLine] = newOption;
}

function ListBoxCheckIfExist( objCmb, strValue ) {
   // Return true if the current value already exist in the list of a Html List Control
   var i;
   
   for ( i = 0; i < objCmb.options.length; i++ ) {
      if ( objCmb.options[i].value == strValue ) {
         return true;
      }
   }
   
   return false;
}

function ListBoxClear( objCmb ) {
  for (var i = objCmb.options.length-1; i>=0; i--){
    objCmb.options[i] = null;
  }
  objCmb.selectedIndex = -1;
}


function Replace ( strString, strReplace, strReplaceWith ) {

   var strReturn = strString;
   var intPosition;
   
   intPosition = strReturn.indexOf(strReplace);
   
   while ( intPosition > -1 ) {
      strReturn = "" + (strReturn.substring(0, intPosition) + strReplaceWith + strReturn.substring((intPosition + strReplace.length), strReturn.length));
      intPosition = strReturn.indexOf(strReplace);
   }
   
   return strReturn;

}



function IsDecimal(str){
   var s = trim(str);
   
   var len = s.length;

   if(len == 0){
      return true;
   }else{
      var i = 0;
      var floated = false;
         
      for(i = 0; i < len; i++){
      
         if ( s.charAt(i) == '.' && i != len - 1 ){
               
            if(!floated){
               floated = true;
            }else{
               return false;
            }
         }else{
               
            if(s.charAt(i) < '0' || s.charAt(i) > '9'){
              return false;
            }
         }
      }
      
      if(i < len){
         return false;
      }else{
         return true;
      }    
   }
}

function IsNumeric(str){

   var s = trim(str.toString());
   var len = s.length;

   if(len == 0){
      return true;
   }else{
      
      if ( s.charAt(0) == '-' ) {
         s = s.substr(1, s.length - 1)
         --len;
      }
      
      if ( s.indexOf(".") != -1 ) {
         if ( !IsDecimal(s) ) {
            return false;
         }
      }
      
      var i = 0;
      
      for(i = 0; i < len; i++){

         if( (s.charAt(i) < '0' || s.charAt(i) > '9') && s.charAt(i) != '.' ){
            return false;
         }
      }
   
      if(i < len){
         return false;
      }else{
         return true;
      }
   }
}

function CountNumber(str){
   var len = str.length;
   var iCount = 0;
   var i = 0;
   for (i=0; i<len; i++)
   {
      if( (str.charAt(i) >= '0' && str.charAt(i) <= '9') ) 
         iCount++;
   }
   return iCount;
}

function Round ( dblNumber ) {

   dblNumber *= 100;
   dblNumber = Math.round(dblNumber);
   dblNumber /= 100;
   
   return dblNumber;

}

function IsDate ( strDate ) {

   var datePat = /^(\d{1,2})(\/)(\d{1,2})(\/)(\d{4})$/;
   var arrDate = strDate.match(datePat);
   var intMonth, intDay, intYear;
   var IsValid = true;

   if (arrDate == null) {
      
      IsValid = false;
      
   } else {

      intMonth = arrDate[1];
      intDay = arrDate[3];
      intYear = arrDate[5];

      if ( intMonth < 1 || intMonth > 12 ) {
         IsValid = false;
      } else if ( intDay < 1 || intDay > 31 ) {
         IsValid = false;
      } else if ( ( intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11 ) && intDay == 31 ) {
         IsValid = false;
      } else if (intMonth == 2) {
         var isleap = (intYear % 4 == 0 && (intYear % 100 != 0 || intYear % 400 == 0));
         if ( intDay > 29 || (intDay == 29 && !isleap) ) {
            IsValid = false;
         }
      }
      
   }
   
   return IsValid;
}

function getDateDifference ( strDate1, strDate2 ) {

   //Format of date string must be "mm/dd/yyyy"
   
   var arrDate1 = strDate1.split("/");
   var arrDate2 = strDate2.split("/");
   
   // In javascript, months goes from 0 to 11.
   // That why there's a -1 in arrDateX[0].
   var objDate1 = new Date(arrDate1[2], arrDate1[0] - 1, arrDate1[1]);
   var objDate2 = new Date(arrDate2[2], arrDate2[0] - 1, arrDate2[1]);
   
   var dblDateDifference = objDate1.getTime() - objDate2.getTime();
   
   return Round(dblDateDifference / 86400000);

}

function trim(value) {
   if (value != null)
      value = value.replace(/^\s*(\b.*\b|)\s*$/, "$1");
   return value;
}
/* old TRIM function 05-01-07
function trim(s){
   var len = s.length;

   if(len == 0){
      return s;
   }else{
      var i = 0;
      var begin = 0;
      var end = len;
      
      for(i = 0; i < len; i++){

         if(s.charAt(i) == ' '){
            begin++;
         }else{
            break;
         }
      }

      for(i = len - 1; i >= 0; i--){
      
         if(s.charAt(i) == ' '){
            end--;
         }else{
            break;
         }
      }

      return s.substring(begin, end);
   }
}*/

function ValideVIAPrefNumber_FirstChar(c)
{
   return (((c >='0') && (c <= '9')) || (c == 'A') || (c == 'C') || (c == 'D') || (c == 'E') || (c == 'H') || (c == 'T') || (c == 'W'));
}
function ValideVIAPrefNumber_MidChar(c)
{
   return ((c >='0') && (c <= '9'));
}
function ValideVIAPrefNumber_LastChar(c)
{
   return (((c >='0') && (c <= '9')) || (c == 'A') || (c == 'B') || (c == 'C') || (c == 'D') || (c == 'E') || (c == 'F') || (c == 'G') || (c == 'H') || (c == 'J') || (c == 'K'));
}
function ValideVIAPrefNumber(str)
{
   str = str.toUpperCase();
   return ((str.length == 7) &&
      ValideVIAPrefNumber_FirstChar(str.charAt(0)) &&
      ValideVIAPrefNumber_MidChar(str.charAt(1)) &&
      ValideVIAPrefNumber_MidChar(str.charAt(2)) &&
      ValideVIAPrefNumber_MidChar(str.charAt(3)) &&
      ValideVIAPrefNumber_MidChar(str.charAt(4)) &&
      ValideVIAPrefNumber_MidChar(str.charAt(5)) &&
      ValideVIAPrefNumber_LastChar(str.charAt(6)));  
}

function goMultiTripBackPage(AppRoot, nbTrip)
{
    var backIndex;
    var url;
    
    if(nbTrip !='')
    {
        backIndex = nbTrip-1;
        if (backIndex < 0 || backIndex >5) 
        {
            url = AppRoot + 'searchmulti.aspx';
        } 
        else
        {
            url = AppRoot + 'search/multitripresult.aspx?ti=' + backIndex;
        }
    }
    else
    {
      var currentIndex = document.frmSelectTrain.txtHCurrentPage.value;
      backIndex = parseInt(currentIndex)-1;
      if (currentIndex =='' || backIndex < 0 || backIndex >5) 
      {
         url = AppRoot + 'searchmulti.aspx';
      } 
      else  
      {
          url = AppRoot + 'search/multitripresult.aspx?ti=' + backIndex;
      }
    }
    window.location = url; 
}

function HasInvalidChar(data){
   var len = data.length;
   var i = 0;
   for (i=0; i<len; i++)
   {
      
      var char = data.charAt(i);
      var code = char.charCodeAt(0);

      if( (code < 32) ||  (code > 255) )
      { 
	    return true;
      }
   }
   return false;
}


// Rounded function
function NiftyCheck() {
  if(!document.getElementById || !document.createElement) {
    return false;
  }
  var b = navigator.userAgent.toLowerCase();
  if (b.indexOf("msie 5") > 0 && b.indexOf("opera") == -1) {
    return false;
  }
  return true;
}

function Rounded(className, sizex, sizey, sizex_b, sizey_b) {
	var bk;
	if (!NiftyCheck()) return;
	if (typeof(sizex_b) == 'undefined')
		sizex_b = sizex;
	if (typeof(sizey_b) == 'undefined')
		sizey_b = sizey;
	var v = getElements(className);
	var l = v.length;
	for (var i = 0; i < l; i++) {
		color = get_current_style(v[i],"background-color","transparent");
		bk = get_current_style(v[i].parentNode,"background-color","transparent");
		AddRounded(v[i], bk, color, sizex, sizey, true);
		AddRounded(v[i], bk, color, sizex_b, sizey_b, false);
	}
}

Math.sqr = function (x) {
  return x*x;
};

function Blend(a, b, alpha) {

  var ca = Array(
    parseInt('0x' + a.substring(1, 3)), 
    parseInt('0x' + a.substring(3, 5)), 
    parseInt('0x' + a.substring(5, 7))
  );
  var cb = Array(
    parseInt('0x' + b.substring(1, 3)), 
    parseInt('0x' + b.substring(3, 5)), 
    parseInt('0x' + b.substring(5, 7))
  );
  return '#' + ('0'+Math.round(ca[0] + (cb[0] - ca[0])*alpha).toString(16)).slice(-2).toString(16)
             + ('0'+Math.round(ca[1] + (cb[1] - ca[1])*alpha).toString(16)).slice(-2).toString(16)
             + ('0'+Math.round(ca[2] + (cb[2] - ca[2])*alpha).toString(16)).slice(-2).toString(16);

  return '#' + ('0'+Math.round(ca[0] + (cb[0] - ca[0])*alpha).toString(16)).slice(-2).toString(16)
             + ('0'+Math.round(ca[1] + (cb[1] - ca[1])*alpha).toString(16)).slice(-2).toString(16)
             + ('0'+Math.round(ca[2] + (cb[2] - ca[2])*alpha).toString(16)).slice(-2).toString(16);
}

function AddRounded(el, bk, color, sizex, sizey, top) {
  if (!sizex && !sizey)
	return;
  var i, j;
  var d = document.createElement("div");
  d.style.backgroundColor = bk;
  d.style.height = sizey+'px'; 
  var lastarc = 0;
  for (i = 1; i <= sizey; i++) {
    var coverage, arc2, arc3;
    // Find intersection of arc with bottom of pixel row
    arc = Math.sqrt(1.0 - Math.sqr(1.0 - i / sizey)) * sizex;
    // Calculate how many pixels are bg, fg and blended.
    var n_bg = sizex - Math.ceil(arc);
    var n_fg = Math.floor(lastarc);
    var n_aa = sizex - n_bg - n_fg;
    // Create pixel row wrapper
    var x = document.createElement("div");
    var y = d;
    x.style.margin = "0px " + n_bg + "px";
	x.style.height='1px';
	x.style.overflow='hidden';
    // Make a wrapper per anti-aliased pixel (at least one)
    for (j = 1; j <= n_aa; j++) {
      // Calculate coverage per pixel
      // (approximates circle by a line within the pixel)
      if (j == 1) {
        if (j == n_aa) {
          // Single pixel
          coverage = ((arc + lastarc) * .5) - n_fg;
        }
        else {
          // First in a run
          arc2 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j + 1) / sizex)) * sizey;
          coverage = (arc2 - (sizey - i)) * (arc - n_fg - n_aa + 1) * .5;
          // Coverage is incorrect. Why?
          coverage = 0;
        }
      }
      else if (j == n_aa) {
        // Last in a run
        arc2 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j + 1) / sizex)) * sizey;
        coverage = 1.0 - (1.0 - (arc2 - (sizey - i))) * (1.0 - (lastarc - n_fg)) * .5;
      }
      else {
        // Middle of a run
        arc3 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j) / sizex)) * sizey;
        arc2 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j + 1) / sizex)) * sizey;
        coverage = ((arc2 + arc3) * .5) - (sizey - i);
      }
      
      x.style.backgroundColor = Blend(bk, color, coverage);
	  if (top)
	      y.appendChild(x);
      else
	      y.insertBefore(x, y.firstChild);
      y = x;
      var x = document.createElement("div");
		x.style.height='1px';
		x.style.overflow='hidden';
      x.style.margin = "0px 1px";
    }
    x.style.backgroundColor = color;
    if (top)
	    y.appendChild(x);
    else
		y.insertBefore(x, y.firstChild);
    lastarc = arc;
  }
  if (top)
	  el.insertBefore(d, el.firstChild);
  else
	  el.appendChild(d);
}

function getElements(className) {
	var elements = [];
	var el = document.getElementsByTagName('DIV');  
	var regexp=new RegExp("\\b"+className+"\\b");
	for (var i = 0; i < el.length; i++) 
	{
		if (regexp.test(el[i].className)) 
			elements.push(el[i]);
	}
	return elements;
}

function get_current_style(element,property,not_accepted)
{
  var ee,i,val,apr;
  try
  {
    var cs=document.defaultView.getComputedStyle(element,'');
    val=cs.getPropertyValue(property);
  }
  catch(ee)
  {
    if(element.currentStyle)
  	{
	    apr=property.split("-");
	    for(i=1;i<apr.length;i++) apr[i]=apr[i].toUpperCase();
	    apr=apr.join("");
	    val=element.currentStyle.getAttribute(apr);
   }
  }
  if((val.indexOf("rgba") > -1 || val==not_accepted) && element.parentNode)
  {
	 if(element.parentNode != document) 
		 val=get_current_style(element.parentNode,property,not_accepted);
	 else
		 val = '#FFFFFF';
  }
  if (val.indexOf("rgb") > -1 && val.indexOf("rgba") == -1)
	  val = rgb2hex(val);
  if (val.length == 4)
	  val = '#'+val.substring(1,1)+val.substring(1,1)+val.substring(2,1)+val.substring(2,1)+val.substring(3,1)+val.substring(3,1);
  return val;
}

function rgb2hex(value)
{
	var x = 255;
	var hex = '';
	var i;
	var regexp=/([0-9]+)[, ]+([0-9]+)[, ]+([0-9]+)/;
	var array=regexp.exec(value);
	for(i=1;i<4;i++) hex += ('0'+parseInt(array[i]).toString(16)).slice(-2);
	return '#'+hex;
}
