﻿var isIE = (navigator.appName == "Microsoft Internet Explorer");

function LTrim(text) {var reBeg = /^[\s]/g; while (text.match(reBeg)) text = text.replace(reBeg, ""); return text;}
function RTrim(text) {var reBeg = /[\s]$/g; while (text.match(reBeg)) text = text.replace(reBeg, ""); return text;}
function Trim(text) {return LTrim(RTrim(text));}

function makeNumericTextBox(evt)
{
  evt = (evt) ? evt : ((window.event) ? event : null);

  if (evt) 
  {
    var charCode = (evt.charCode) ? evt.charCode :
                    ((evt.keyCode) ? evt.keyCode :
                    ((evt.which) ? evt.which : 0));

    var ch = String.fromCharCode(charCode);
    
    // support for home and end keys added
    if (charCode < 32 || charCode == 35 || charCode == 36 ||  charCode == 37 || charCode == 39 || charCode == 46) return true;    
    if ((charCode <= 57) && (charCode >= 48) &&  !evt.shiftKey) return;
    
    if ((ch=='" +NumberFormatInfo.CurrentInfo.NegativeSign +"') || 
        (ch=='" +NumberFormatInfo.CurrentInfo.NumberDecimalSeparator + @"')) return;
    
    if (window.event) evt.returnValue = false;
    else evt.preventDefault();
    
    return false;
  }
}

/**
 * Check if a radio button is selected (checked) or not.
 *
 * @param ele - name of the radio button group to check selection
 * @param val - error message to display
 * @return TRUE/FALSE indicating whether the given radio button is selected
 *         or not
 */
function isRadioSelected(ele, errMsg) {
   if (ele.length > 1) {
      for (i=0; i<ele.length;i++){
         if (ele[i].checked) {
            return true;
         }
      }

      alert(errMsg);
      ele[0].focus();
      return false;
   }
  else {
      if (ele.checked) return true;

      alert(errMsg);
      ele.focus();
      return false;
   }
}

/**
 * Returns the selected (checked) value of a given radio button group
 *
 * @param ele - name of the radio button group to check selection
 * @return string value of the radio button selected
 */
function getRadioValue(ele) {
   if (ele.length > 1) {
      for (i=0; i<ele.length;i++){
         if (ele[i].checked) {
            return ele[i].value;
         }
      }
   }
  else {
      if (ele.checked) return ele.value;
   }

   return '-1';
}

function deselectRadios(ele) {
   if (ele.length > 1) {
      for (i=0; i<ele.length;i++){
         ele[i].checked = false;
      }
   }
  else {
      ele.checked = false;
   }
}

function selectRadioValue(ele, value) {
   if (ele.length > 1) {
      for (i=0; i<ele.length;i++){
         if (ele[i].value == value) {
            ele[i].checked = true;
            break;
         }
      }
   }
  else {
      ele.checked = true;
   }
}

function enableDisableRadio(ele, disable) {
   if (ele.length > 1) {
      for (i=0; i<ele.length;i++){
         ele[i].disabled=disable;
      }
   }
  else {
      ele.disabled=disable;
   }
}

function wopen(url, name, wndWidth, wndHeight)
{
  // Fudge factors for window decoration space.
  // In my tests these work well on all platforms & browsers.
  wndWidth += 32;
  wndHeight += 96;
  wleft = (screen.width - wndWidth) / 2;
  wtop = (screen.height - wndHeight) / 2;

  // IE5 and other old browsers might allow a window that is
  // partially offscreen or wider than the screen. Fix that.
  // (Newer browsers fix this for us, but let's be thorough.)
  if (wleft < 0) {
    wndWidth = screen.width;
    wleft = 0;
  }

  if (wtop < 0) {
    wndHeight = screen.height;
    wtop = 0;
  }

  var win = window.open(url,
    name,
    'width=' + wndWidth + ', height=' + wndHeight + ', ' +
    'left=' + wleft + ', top=' + wtop + ', ' +
    'location=no, menubar=no, ' +
    'status=no, toolbar=no, scrollbars=no, resizable=no');

  // Just in case width and height are ignored
  win.resizeTo(wndWidth, wndHeight);

  // Just in case left and top are ignored
  win.moveTo(wleft, wtop);
  win.focus();
}

function closeThisWindow()
{
  if (confirm("Are you sure, you want to close this window?"))
  {
    window.close();
  }
}

function checkDate(ele)
{
  var date = Date.parse(ele.value);
  if (date == null || date == undefined || isNaN(date)) 
  {
    ele.value ="";
    alert("Invalid date \nFormat should be month/date/year.");
    return false;
  }

  var tokens = ele.value.split("/", 3); /** Format: mm/dd/yyyy */
  var month = parseInt(tokens[0], 10);
  var date = parseInt(tokens[1], 10);
  var year = parseInt(tokens[2], 10);
  if (month > 12 )
  {
    ele.value ="";
    alert("Invalid month \nFormat should be month/date/year.");
    return false;
  }
  else if (date > 31)
  {
    ele.value = "";
    alert("Invalid day.");
    return false;
  }
  else if (year < 2008)
  {
    ele.value = "";
    alert("Invalid year.");
    return false;
  }
  else if (year > 2100)
  {
    ele.value = "";
    alert("Invalid year.");
    return false;
  }
  else if (month == 4 || month == 6 || month == 9 || month == 11 )
  {
    if (date == 31)
    {
      ele.value = "";
      alert("No such day in (" + month + ") this month.");
      return false;
    }
  }
  else if (month == 2)
  {
    if (year%4 == 0)
    {
      if (date == 30 || date == 31)
      {
        ele.value = "";
        alert("No such day in 2nd month.");
        return false;
      }
    }
    else 
    {
      if (date == 29 || date == 30 || date == 31)
      {
        ele.value = "";
        alert("No such day in 2nd month.");
        return false;
      }
    }
  }
}

/*
* Use this function to do a partial postback and update.
* The cotent recieving should also be passed.
* @Param: contentsURL - Url of the content provider.
* @Param: contentHolder - Name of the content holder(Prefered element which supports innerHTML)
*/
function doPartialPageUpdate(contentsURL, contentHolder)
{
  var oXmlHttp = zXmlHttp.createRequest();
  var isQuerystringExsists = contentsURL.indexOf("?");
  if (isQuerystringExsists == -1)
    contentsURL = contentsURL + "?ajax=b";
  AjaxOpen(oXmlHttp, "get", contentsURL, true);
  oXmlHttp.onreadystatechange = function () 
  { try
    {   
    if (oXmlHttp.readyState == 4) 
    {
      if (oXmlHttp.status == 200) 
      {	          
        var response = oXmlHttp.responseText;
        contentHolder.innerHTML =  response;
      }
    }
    }
    catch(e)
    {
      alert("Function doPartialPageUpdate: An unknown error occured.");
    }
  };
  oXmlHttp.send(null);
}
  
  function checkDecimalTextBox(evt, value)
  {
    evt = (evt) ? evt : ((window.event) ? event : null);
    if (evt) {
      var charCode = (evt.charCode) ? evt.charCode :
                      ((evt.keyCode) ? evt.keyCode :
                      ((evt.which) ? evt.which : 0));

      var ch = String.fromCharCode(charCode);
      if (charCode < 32 ) return true;
      
      if (charCode == 46 )
      {
         var re = /\./;
         value = value.toString();
         
         if (!value.match(re))
         {
           return true;
         }
         else
         {
	         return false;
	       } 
      }
      
      if ((charCode <= 57) && (charCode >= 48) &&  !evt.shiftKey) return;
      
      if ((ch=='" +NumberFormatInfo.CurrentInfo.NegativeSign +"') || 
          (ch=='" +NumberFormatInfo.CurrentInfo.NumberDecimalSeparator + @"')) return;
      
      if (window.event) evt.returnValue = false;
      else evt.preventDefault();
      
      return false;
    }
  }  
  
  // To restrict the textBox for not to allow more than maxLength chars
	function validateTextArea(eleName, maxLength)
	{
		var newlines = countInstances(eleName.value, "\n") + 1;
    var length = parseInt(eleName.value.length) + parseInt(newlines);
    var newmaxlength = maxLength - parseInt(newlines);
    if (parseInt(length) > parseInt(maxLength))
    {
       eleName.value = eleName.value.substring(0, newmaxlength);
       alert("The maximum number of characters should not exceed " + maxLength);
       eleName.focus();
    }
	}	
	
	function countInstances(mainStr, srchStr) {
    var count = 0;
    var offset = 0;
    do {
        offset = mainStr.indexOf(srchStr, offset);
        count += (offset != -1) ? 1 : 0;
    } while (offset++ != -1)
    return count
}

/*
 startsWith(str, prefix[, start[, end]]) -> bool

 Return true if str ends with the specified prefix, false otherwise.
 With optional start, test str beginning at that position.
 With optional end, stop comparing str at that position.
 prefix can also be an array of strings to try.
*/
function startsWith(str, prefix, start, end) {
    if (arguments.length < 2) {
        throw new TypeError('startsWith() requires at least 2 arguments');
    }
        
    // check if start and end are null/undefined or a 'number'
    if ((start == null) || (isNaN(new Number(start)))) {
        start = 0;
    }
    if ((end == null) || (isNaN(new Number(end)))) {
        end = Number.MAX_VALUE;
    }
    
    // if it's an array
    if (typeof prefix == "object") {
        for (var i = 0, j = prefix.length; i < j; i++) {
            var res = _stringTailMatch(str, prefix[i], start, end, true);
            if (res) {
                return true;
            }
        }
        return false;
    }
    
    return _stringTailMatch(str, prefix, start, end, true);
}

/*
 endsWith(str, suffix[, start[, end]]) -> bool

 Return true if str ends with the specified suffix, false otherwise.
 With optional start, test str beginning at that position.
 With optional end, stop comparing str at that position.
 suffix can also be an array of strings to try.
*/
function endsWith(str, suffix, start, end) {
    if (arguments.length < 2) {
        throw new TypeError('endsWith() requires at least 2 arguments');
    }
    
    // check if start and end are null/undefined or a 'number'
    if ((start == null) || (isNaN(new Number(start)))) {
        start = 0;
    }
    if ((end == null) || (isNaN(new Number(end)))) {
        end = Number.MAX_VALUE;
    }
    
    // if it's an array
    if (typeof suffix == "object") {
        for (var i = 0, j = suffix.length; i < j; i++) {
            var res = _stringTailMatch(str, suffix[i], start, end, false);
            if (res) {
                return true;
            }
        }
        return false;
    }
    
    return _stringTailMatch(str, suffix, start, end, false);
}

/*
 Matches the end (direction == false) or start (direction == true) of str
 against substr, using the start and end arguments. Returns false
 if not found and true if found.
*/
function _stringTailMatch(str, substr, start, end, fromStart) {
    var len = str.length;
    var slen = substr.length;
    
    var indices = _adjustIndices(start, end, len);
    start = indices[0]; end = indices[1]; len = indices[2];
    
    if (fromStart) {
        if (start + slen > len) {
            return false;
        }
    } else {
        if (end - start < slen || start > len) {
            return false;
        }
        if (end - slen > start) {
            start = end - slen;
        }
    }
    
    if (end - start >= slen) {
        return str.substr(start, slen) == substr;
    }
    return false;
}

function _adjustIndices(start, end, len)
{
	if (end > len) {
	    end = len;
	} else if (end < 0) {
	    end += len;
	}
    
    if (end < 0) {
        end = 0;
    }
	if (start < 0) {
	    start += len;   
	}
	if (start < 0) {
		start = 0;
	}
	
	return [start, end, len];
}

function setCurrentOption(selectedDiv)
{
  var container = selectedDiv.parentNode;
  var divEle, index, count = container.childNodes.length;

  for (index = 0; index < count; index++)
  {
    divEle = container.childNodes[index];
    divEle.className = (divEle == selectedDiv ? "optionLinkCurrent" : "optionLink");
  }
}
/*
 This function accepts current password ,a new password and retype new passwords
 as inputs and validates them.
*/
function validatePassword(password,newpassword,retypepassword)
  {
  if (password.value == "")
  {
  alert('Please enter your current password.');
  password.focus();
  return false;
  }
  if (newpassword.value == "")
  {
  alert('Please enter your new password.');
  newpassword.focus();
  return false;
  }
  if (retypepassword.value != "")
  {
     if (retypepassword.value != newpassword.value)
     {alert('Your confirm password and new password did not match. Please try again.');return false;}
  }
  else
  {
  alert('Please enter confirm password.');
  retypepassword.focus();
  return false;
  }
  return true;
  }

function setDocID(frm, btn, id, eleID)
{

 if (eleID.value == "")
 {
   eleID.focus();
   alert("Please select a file for upload");
   return false;
 }
 
  frm.hidGNDocumentID.value = id;
  return true;
}

function fixIFrameHeight(iFrameEle, defaultHeight)
{
  var maxHeight = null;
  try
  {
    if (!isIE)
    {
      if (iFrameEle.contentDocument)
      {
        if (iFrameEle.contentDocument.body)
        {
          maxHeight = iFrameEle.contentDocument.body.offsetHeight;
        }
        else if (iFrameEle.contentDocument.documentElement)
        {
          maxHeight = iFrameEle.contentDocument.documentElement.clientHeight;
        }
      }
      else
      {
        if (iFrameEle.document.body)
        {
          maxHeight = iFrameEle.document.body.offsetHeight;
        }
      }
    }
    
    if (maxHeight == null) { maxHeight = defaultHeight;}    
    iFrameEle.style.height = (maxHeight + 20) + "px";
  }
  catch (exception)
  {
  }
}

function resetIFrameHeight()
{
  var iFrameEle = window.parent.document.getElementById("frameClientInfo");  
  fixIFrameHeight(iFrameEle, 350);
}
 
/* --------------------------------------------------
** This function shows a popup window which displays
** a player for viewing videos from youtube portal
** -------------------------------------------------
*/
function showYouTubePreview(relPath, url)
{
  var url = relPath + "PreviewVideo.aspx?url=" + encodeURIComponent(url);
  wopen(url, "PreviewVideo", 480, 360)
}
 
//-----------------------------------------------------------------

function isValidEmail(email)
{
  var re = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/;			
  return email.match(re);
}


/* ------------------------------------------------------------------
It checks the file extensions
*/

function checkFileExtension(ele)
{    
  var fileExtensionList = new Array('gif', 'png', 'bmp', 'jpg', 'jpeg', 'pdf');
  var nIndex;
  var validExtension = false;

  if(Trim(ele.value) == '') return;         
     
  var fileExtension = ele.value.split('.')[1];   
          
  for (nIndex = 0; nIndex < fileExtensionList.length; nIndex++)
  {
    if (Trim(fileExtensionList[nIndex]) == Trim(fileExtension.toLowerCase())) 
    {
      validExtension = true;
      return;
    }
  }
  
  if (!validExtension)
  {
    alert('Please upload file with extension like ' + fileExtensionList + ' only.');
    ele.value = null;
    ele.focus();        
  }
  return validExtension;
}

function fixRegFrameHeightX(iframeEle)
{
  fixRegFrameHeight(iframeEle);
  try {
    iframeEle.contentDocument.body.setAttribute("style", "background-color: White");
    var reqEle = iframeEle.contentDocument.getElementById("tblMainContents");
    if (reqEle) reqEle.className = "main2";
  } catch (e) {}
}

function showHideContents(img, dateDivIndex)
{
  var srcText = img.src.substring(img.src.length - 12);
  var showAsVisible = (srcText != "collapse.gif");
  img.src = (showAsVisible ? "../Images/toggle-collapse.gif" : "../Images/toggle-expand.gif");
  var index = 0, done = false, foundEle;

  while (!done)    
  {
    foundEle = document.getElementById("div_" +dateDivIndex + "_" +index);
    if (!foundEle) break;
    foundEle.style.display = (showAsVisible ? "block" : "none");
    index++;
  }
}

function toggleDisplay(elementID)
{
  var element = document.getElementById(elementID);
  element.style.display = (element.style.display == "block" ? "none" : "block");
}

function showCourseSelection()
{
  var url = "Course-Search.aspx";
  
  if (isIE)
  {
    window.open(url);
  }
  else
  {
    wopen(url, "Course-Search", 1000, 700);
  }
}  


function makePhoneNumberTextBox(evt)
{
  evt = (evt) ? evt : ((window.event) ? event : null);

  if (evt) 
  {
    var charCode = (evt.charCode) ? evt.charCode :
                    ((evt.keyCode) ? evt.keyCode :
                    ((evt.which) ? evt.which : 0));

    var ch = String.fromCharCode(charCode);

    // support for home and end keys added
    if (charCode <= 32 || charCode == 35 || charCode == 36 ||  charCode == 37 || charCode == 39 || charCode == 45 || charCode == 46) return true;    
    if ((charCode <= 57) && (charCode >= 48) &&  !evt.shiftKey) return;
    
    if ((ch=='" +NumberFormatInfo.CurrentInfo.NegativeSign +"') || 
        (ch=='" +NumberFormatInfo.CurrentInfo.NumberDecimalSeparator + @"')) return;
    
    if (window.event) evt.returnValue = false;
    else evt.preventDefault();
    
    return false;
  }
}

/////////////////////////////////////////////////////////////////////////////
// Function: LEIsAtleastOneSelected                                        //
// Remarks : Given a list element (radio-button list/check-box list)       //
//           returns true if atleast one item is checked. Returns false    //
//           otherwise.                                                    //
/////////////////////////////////////////////////////////////////////////////
function LEIsAtleastOneSelected(eleID)
{
  var ele = document.getElementById(eleID);
  if (undefined == document.getElementById(eleID + "_0"))
  {
    return ele.checked;
  }
  
  var index = 0;
  while (true)
  {
    ele = document.getElementById(eleID + "_" + index);
    if (undefined == ele) break;
    if (ele.checked) return true;
    index++;
  }
  
  return false;
}

/////////////////////////////////////////////////////////////////////////////
// Function: LEGetSelectedIndex                                            //
// Remarks : Given a list element (radio-button list/check-box list)       //
//           returns selected element index                                //
/////////////////////////////////////////////////////////////////////////////
function LEGetSelectedIndex(eleID)
{
  var ele = document.getElementById(eleID);
  if (undefined == document.getElementById(eleID + "_0"))
  {
    return 0;
  }
  
  var index = 0;
  while (true)
  {
    ele = document.getElementById(eleID + "_" + index);
    if (undefined == ele) break;
    if (ele.checked) return index;
    index++;
  }
  
  return 0;
}

