﻿/**********************-----------Custom Functions --------------------------*/
Array.prototype.removeAt = function(i)
{
    for(var iCount=i;iCount<this.length-1;iCount++)
    {
        this[iCount]=this[iCount+1];
    }
    this.pop();
}

Array.prototype.objectSearch = function(propertyName, propertyValue)
{
    for(var iCount=0;iCount<this.length;iCount++)
    {
        if(this[iCount][propertyName]==propertyValue)
        {
            return iCount;
        }
    }
    return -1;
}

Array.prototype.getSelectedRows = function(propertyName, propertyValue)
{
    var selectedRows = [];
    for(var iCount=0;iCount<this.length;iCount++)
    {
        if(this[iCount][propertyName]==propertyValue)
        {
            selectedRows[selectedRows.length] = this[iCount];
        }
    }
    return selectedRows;
}

Array.prototype.lastObjectSearch = function(propertyName, propertyValue)
{
    for(iCount=this.length-1;iCount>=0;iCount--)
    {
        if(this[iCount][propertyName]==propertyValue)
        {
            return iCount;
        }
    }
    return -1;
}

/*-----------------------------Utilitiy Functions ----------------------------*/

var Utilities = new Object();
Utilities.setElementText = function(element,text)
{
    while(element.childNodes.length>0)
    {
        element.removeChild(element.childNodes[0]);
    }
    var parts = (text+"").split("\n");
    element.appendChild(document.createTextNode(parts[0]));
    for(var iCount=1;iCount<parts.length;iCount++)
    {
        element.appendChild(document.createElement("br"));
        element.appendChild(document.createTextNode(parts[iCount]));
    }
}

Utilities.addControlsToObject = function(classObj, element)
{
    var idStr = Utilities.getElementId(element);
    if(idStr!="")
    {
        eval("classObj." + idStr + "=element");
    }    
    try
    {
        for(var iCount=0;iCount<element.childNodes.length;iCount++)
        {
            Utilities.addControlsToObject(classObj, element.childNodes[iCount]);
        }
    }
    catch(ex)
    {
    }
}

Utilities.getElementId = function(element)
{
    var idStr="";
    try
    {
        if(element.id) idStr = element.id;
    }
    catch(ex)
    {
        idStr = "";
    }
    idStr = idStr + "";
    if(idStr=="") return "";    
    var parts = idStr.split(".");
    return parts[parts.length-1];
}

Utilities.getObjectStr = function(obj)
{
    var str = "";
    for(var i in obj)
    {
        str+= i + "=" + obj[i] + "\n";
    }
    return str;
}

Utilities.GetResponseValue = function(res)
{
    if(Utilities.getObjectStr(res.error).trim()!="")
    {
        alert(Utilities.getObjectStr(res.error));
    }
    return res.value;
}

Utilities.DeleteRows = function(tBody, fromRow, toRow)
{
    if(!toRow)
    {
        toRow = tBody.rows.length-1;
    }
    if(!fromRow)
    {
        fromRow = 0;
    }
    for(var iCount=toRow;iCount>=fromRow;iCount--)
    {
        tBody.deleteRow(iCount);
    }
}

Utilities.SetRows = function(tBody, trSample, startRowIndex, totalRows)
{
    var currentRows = tBody.rows.length - startRowIndex;
    while(currentRows<totalRows)
    {
        tBody.appendChild(trSample.cloneNode(true));
        currentRows++;
    }
    while(currentRows>totalRows)
    {
        tBody.deleteRow(tBody.rows.length-1);
        currentRows--;
    }
}

Utilities.SetRowsChecked = function(tBody, startRowIndex, cellIndex, checked)
{
    var rows = tBody.rows;
    for(var iCount=startRowIndex;iCount<rows.length;iCount++)
    {
        var input = rows[iCount].cells[cellIndex].getElementsByTagName("input")[0];
        if(!input.disabled)
        {
            input.checked = checked;
        }
    }
}

Utilities.GetFirstParent = function(obj, parentTag)
{
    var parent = obj.parentNode;
    while(parent.tagName.toUpperCase() != parentTag.toUpperCase()){
        parent = parent.parentNode;
    }
    return parent;
}

Utilities.sortTable = function(tbl, getRowValueFun, compareValuesFun, firstRow,lastRow)
{	
	var rows = tbl.tBodies[0].rows;	
	var tbody = tbl.tBodies[0];
	var totalRows = lastRow - firstRow + 1;
	var sortRows = new Array(totalRows);
	var values = new Array(totalRows);
	var iCount;
	for(iCount=0;iCount<totalRows;iCount++)
	{
		var currentRow = rows[iCount+firstRow];
		values[iCount] = getRowValueFun(currentRow);
		sortRows[iCount] = iCount;
	}
	var sortFun = function(row1,row2) { return compareValuesFun(values[row1],values[row2])?-1:1;};
	sortRows.sort(sortFun);
	var sortedRows = new Array(totalRows);
	for(iCount=0;iCount<totalRows;iCount++)
	{
		sortedRows[iCount] = rows[sortRows[iCount]+firstRow].cloneNode(true);
	}
	var referenceRow = (lastRow==(rows.length-1))?null:rows[lastRow+1];
	for(iCount=lastRow;iCount>=firstRow;iCount--)
	{
		tbody.deleteRow(iCount);
	}
	if(referenceRow==null)
	{
		for(iCount=0;iCount<totalRows;iCount++)
		{
			tbody.appendChild(sortedRows[iCount]);
		}			
	}
	else
	{
		for(iCount=0;iCount<totalRows;iCount++)
		{
			tbody.insertBefore(sortedRows[iCount],referenceRow);
		}			
	}
	
}

Utilities.deleteOptions = function(selectElement, deleteFirst)
{
    var i;
    if(deleteFirst){
        i = 0;
    }
    else{
        i = 1;
    }
    while(selectElement.length>i){
        selectElement.remove(i);
    }
}

Utilities.populateOptionsFromTable = function(selectElement, table, valueField, nameField, deleteFirst){
    Utilities.deleteOptions(selectElement,deleteFirst);
    var Rows = table.Rows;
    function compareFun(row1,row2)
    {
        var type = (typeof(row1[nameField])+"");
        if(type.toUpperCase()=="STRING")
            return row1[nameField].trim().toUpperCase()<row2[nameField].trim().toUpperCase()?-1:1;
        return row1[nameField]<row2[nameField]?-1:1;
    }
    Rows.sort(compareFun);
    var iCount=0;
    for(iCount=0;iCount<table.Rows.length;iCount++){
        Utilities.addOption(selectElement, Rows[iCount][valueField], Rows[iCount][nameField]);
    }
}

Utilities.populateOptionsFromTableSelected = function(selectElement, table, valueField, nameField, conditionValue, conditionField, deleteFirst){
    Utilities.deleteOptions(selectElement,deleteFirst);
    var Rows = table.Rows;
    function compareFun(row1,row2)
    {
        var type = (typeof(row1[nameField])+"");
        if(type.toUpperCase()=="STRING")
            return row1[nameField].trim().toUpperCase()<row2[nameField].trim().toUpperCase()?-1:1;
        return row1[nameField]<row2[nameField]?-1:1;
    }
    Rows.sort(compareFun);
    var iCount=0;
    for(iCount=0;iCount<table.Rows.length;iCount++){
        if(table.Rows[iCount][conditionField] == conditionValue)
        {
            Utilities.addOption(selectElement, Rows[iCount][valueField], Rows[iCount][nameField]);
        }
    }
}

Utilities.populateOptionsFromList = function(selectElement, list, deleteFirst)
{
    Utilities.deleteOptions(selectElement,deleteFirst);
    var listElements = list.split(",");
    var iCount;
    for(iCount=0;iCount<listElements.length;iCount++)
    {
        listElements[iCount] = listElements[iCount].trim();
    }
    function compareFun(item1,item2)
    {
        return item1.trim().toUpperCase()<item2.trim().toUpperCase()?-1:1;
    }
    listElements.sort(compareFun);
    for(var iCount=0;iCount<listElements.length;iCount++)
    {
        if(listElements[iCount]!="")
        {
            Utilities.addOption(selectElement, listElements[iCount], listElements[iCount]);
        }
    }
}



Utilities.addOption = function(selectElement, value, text){
    var newOption = document.createElement("option");
    if(document.all){
        selectElement.options.add(newOption);
    }
    else{
        selectElement.appendChild(newOption);        
    }
    newOption.value = value;
    
    var textNode = document.createTextNode(text);
    newOption.appendChild(textNode);
}

Utilities.getSelectText = function(selectElement)
{
    var str = selectElement.options[selectElement.selectedIndex].childNodes[0].data;
    return str;
}

Utilities.checkemail = function(str){
    var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
    return filter.test(str);
}

Utilities.checkPercentage = function(str)
{
    try
    {
        var per = parseFloat(str);
        if(isNaN(per)) return false;
        if(per<=100)
        {
            return true;
        }
        return false;
    }
    catch(ex)
    {
        return false;
    }
}

Utilities.checkTime = function(str)
{
    var timePat = /^(\d{1,2}):(\d{2})?(\s?(AM|am|PM|pm))?$/;
    //var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;
    return str.match(timePat);
 
}

Utilities.toTime = function(str)
{
    str = str.trim();
    if(str=="") return null;
    if(str.length<=6) str = str + " AM";
    var parts = str.split(":");
    var parts2 = parts[1].split(" ");
    var hours, minutes;
    if(parts2[1].trim().toUpperCase()=="AM")
    {
        hours = parseInt(parts[0]);
    }
    else
    {
        hours = 12 + parseInt(parts[0]);
    }
    minutes = parseInt(parts2[0]);
    var dt = new Date(2000, 1, 1, hours, minutes, 0);
    return dt;
}

Utilities.formateTime = function(dt)
{
    //return dt;        
    if(dt==null) return "";
    
    var hour = dt.getHours()+"";    
    //alert(dt.setHours());
    //alert(hour);
    if(hour.length==1) hour = "0" + hour;
    var minute = dt.getMinutes() + "";
    if(minute.length==1) minute = "0" + minute;
    return hour + ":" + minute;
}


Utilities.GetElementByClass=function(rootobj,classname,elements)
{
    if(typeof(elements)=="undefined")
    {
        elements = new Array();
    }
    var classStr = Utilities.getElementClass(rootobj);
    if(classStr==classname)
    {
        elements[elements.length] = rootobj;
    }    
    try
    {
        for(var iCount=0;iCount<rootobj.childNodes.length;iCount++)
        {
           Utilities.GetElementByClass(rootobj.childNodes[iCount],classname,elements);
        }
    }
    catch(ex)
    {
    }
    return elements;
   
}

Utilities.getElementClass = function(element)
{
    var classStr="";
    try
    {
        if(element.className) classStr = element.className;
    }
    catch(ex)
    {
        classStr = "";
    }
    classStr = classStr + "";
    return classStr;
}

Utilities.CleanCommaSeperatedList = function(strList)
{
    var newList = strList + "";
    var parts = newList.split(",");
    if(parts.length<=1)
    {
        return newList.trim();
    }
    newList = "";
    var iCount;
    for(iCount=0;iCount<parts.length;iCount++)
    {
        var exists = false;
        var jCount;
        for(jCount=0;jCount<iCount;jCount++)
        {
            if(parts[iCount].trim().toUpperCase()==parts[jCount].trim().toUpperCase())
            {
                exists = true;
            }
        }
        if(!exists)
        {
            if(parts[iCount].trim()!="")
            {
                newList = newList==""?parts[iCount].trim():(newList + ", " + parts[iCount].trim());
            }
        }
    }
    return newList;
}

Utilities.checkInteger=function(str)
{   
    var a=/^[0-9]\d*$/ ;   
    return a.test(str.value);        
}

Utilities.checkInt = function(str)
{
    var a=/^[0-9]\d*$/ ;   
    return a.test(str);
}

Utilities.checkNumeric = function(str)
{
    return true;
//    var iCnt = 0;
//    var dot = 0;
//    for(iCnt=0;str.length;iCnt++)
//    {
//     if(str.charAt[iCnt]=='.')
//     {
//      dot += 1;
//     }
//     else if(!isNaN(str.charAt[iCnt]))
//     {
//      
//     }
//     
//    }
}


Utilities.populatePageCombo = function(selectElement, selectedPage, pageSize, totalRecords)
{
    var totalPages = Math.floor(totalRecords/pageSize);
    if((totalRecords%pageSize)!=0)
    {
        totalPages++;
    }
    while(selectElement.length>totalPages)
    {
        selectElement.remove(selectElement.length-1);
    }
    while(selectElement.length<totalPages)
    {
        Utilities.addOption(selectElement, String(selectElement.length),String(selectElement.length+1));        
    }
    selectElement.value = selectedPage;
}


Utilities.FormateDate = function(dt){
    //alert(typeof(dt));
    if(dt==null)
      return "";
    var month = dt.getMonth() + 1;
    var day = dt.getDate();
    var year = dt.getFullYear();
    if(month<10){ month = "0" + month;  }
    if(day<10){ day = "0" + day; }
    year = "" + year;
    var hour = dt.getHours(); 
    var minute = dt.getMinutes(); 
    var ampm = "AM";
    if(hour>11){
        ampm = "PM";
    }
    if (hour > 12) { hour = hour - 12; } 
    if (hour == 0) { hour = 12; } 
    if (minute < 10) { minute = "0" + minute; } 
    return month + "/" + day + "/" + year ;//+ " " + hour + ":" + minute + " " + ampm;
}

Utilities.checkDate = function(fld) 
{
    var mo, day, yr;
    var entry = fld.value;
    var reLong = /\b\d{1,2}[\/-]\d{1,2}[\/-]\d{4}\b/;
    var reShort = /\b\d{1,2}[\/-]\d{1,2}[\/-]\d{2}\b/;
    var valid = (reLong.test(entry)) || (reShort.test(entry));
    if (valid) {
        var delimChar = (entry.indexOf("/") != -1) ? "/" : "-";
        var delim1 = entry.indexOf(delimChar);
        var delim2 = entry.lastIndexOf(delimChar);
        mo = parseInt(entry.substring(0, delim1), 10);
        day = parseInt(entry.substring(delim1+1, delim2), 10);
        yr = parseInt(entry.substring(delim2+1), 10);
        // handle two-digit year
        if (yr < 100) {
            var today = new Date();
            // get current century floor (e.g., 2000)
            var currCent = parseInt(today.getFullYear() / 100) * 100;
            // two digits up to this year + 15 expands to current century
            var threshold = (today.getFullYear() + 15) - currCent;
            if (yr > threshold) {
                yr += currCent - 100;
            } else {
                yr += currCent;
            }
        }
        var testDate = new Date(yr, mo-1, day);
        if (testDate.getDate() == day) {
            if (testDate.getMonth() + 1 == mo) {
                if (testDate.getFullYear() == yr) {
                    // fill field with database-friendly format
                    fld.value = mo + "/" + day + "/" + yr;
                    return true;
                } else {                
                    return false;
                    //alert("There is a problem with the year entry.");
                }
            } else {
                return false;
                //alert("There is a problem with the month entry.");
            }
        } else {
             return false;
            //alert("There is a problem with the date entry.");
        }
    } else {
        return false;
        //alert("Incorrect date format. Enter as mm/dd/yyyy.");
    }
    return false;
}

Utilities.openFCKEditor = function(areaObj) 
{
  Utilities.currAreaObj = areaObj;
  var divFCKEditor = document.getElementById("Globals.divFCKEditor"); 
  if(Utilities.fckEditorControl==null)
  {
   var fckTextArea = document.getElementById("Globals.fckTextArea"); 
   fckTextArea.value = areaObj.value;
   Utilities.fckEditorControl = new FCKeditor(fckTextArea.id,600, 400); 
   Utilities.fckEditorControl.BasePath = "FCKeditor/";
   Utilities.fckEditorControl.ReplaceTextarea();  
  }
  else
  {
   var fckTextArea = document.getElementById("Globals.fckTextArea"); 
   fckTextArea.value = areaObj.value;
   var editor = FCKeditorAPI.GetInstance("Globals.fckTextArea");   
   editor.SetHTML(areaObj.value);
  }   
  Globals.showPopupWindow(divFCKEditor,"HTML Editor");
}

Utilities.SaveFCKEditorValue = function()
{
 var divFCKEditor = document.getElementById("Globals.divFCKEditor");
 var editor = FCKeditorAPI.GetInstance("Globals.fckTextArea");
 Utilities.currAreaObj.value = editor.GetXHTML();
 Globals.hidePopupWindow(); 
}

Utilities.CancelFCKEditor = function()
{
  var divFCKEditor = document.getElementById("Globals.divFCKEditor");
  var editor = FCKeditorAPI.GetInstance("Globals.fckTextArea");
  editor.SetHTML("");
  Globals.hidePopupWindow();  
}

//headerlist.prototype.ReplaceTextAreaWithFCK = function(objTextArea){
//    var fckParentNode = null;
//    var oldTextArea = null;
//    var editor;
//    if(this.oldTextArea!=null){
//        fckParentNode = this.oldTextArea.parentNode;
//        editor = FCKeditorAPI.GetInstance(this.oldTextArea.id);
//        this.oldTextArea.value = editor.GetXHTML();
//        this.ClearChildNodes(fckParentNode);
//        this.oldTextArea.style.display='block';
//        fckParentNode.appendChild(this.oldTextArea);
//    }
//    this.oldTextArea = objTextArea;
//    this.fckEditorControl = null;
//    this.fckEditorControl = new FCKeditor(objTextArea.id);
//    this.fckEditorControl.BasePath = adminPath + "components/FCKeditor/";
//    this.fckEditorControl.ReplaceTextarea();
//}

Utilities.ClearChildNodes = function(objParent)
{
    while(objParent.firstChild) { objParent.removeChild(objParent.firstChild); }
}

//headerlist.prototype.ReplaceFCKWithTextArea = function(){
//    var fckParentNode = null;
//    var editor;
//    if(this.oldTextArea!=null){
//        fckParentNode = this.oldTextArea.parentNode;
//        editor = FCKeditorAPI.GetInstance(this.oldTextArea.id);
//        this.oldTextArea.value = editor.GetXHTML();
//        this.ClearChildNodes(fckParentNode);
//        this.oldTextArea.style.display='block';
//        fckParentNode.appendChild(this.oldTextArea);
//    }
//    this.oldTextArea = null;
//    this.fckEditorControl = null;
//}

Utilities.GetCommaSepratedValuesFromListBox = function(listBox)
{
  var retString = "";
  if(listBox.selectedIndex==-1)
    return retString;  
  var i=0;
  for(i=0;i<listBox.options.length;i++)
  {
   if(listBox.options[i].selected==true)
      retString = retString + listBox.options[i].value + ",";
  }  
  retString = retString.substring(0,retString.length-1);
  return retString;
}

Utilities.GetImmediateChilds = function(obj,tag)
{
    var objs = [];
    for(var iCount=0;iCount<obj.childNodes.length;iCount++)
    {
        if(Utilities.GetTagName(obj.childNodes[iCount]).toUpperCase()==tag.toUpperCase())
        {
            objs[objs.length] = obj.childNodes[iCount];
        }        
    }
    return objs;
}

Utilities.GetTagName = function(obj)
{
    var tagName = "";
    try
    {
        if(typeof(obj.tagName)!="undefined")
        {
            tagName = obj.tagName;
        }
    }
    catch(ex)
    {
        tagName = "";
    }
    return tagName;
}

Utilities.TransferSelectedOptions = function(fromSelectElement, toSelectElement)
{
    for(var iCount=fromSelectElement.options.length-1;iCount>=0;iCount--)
    {
        if(fromSelectElement.options[iCount].selected == true)
        {
            var value = fromSelectElement.options[iCount].value;
            var text = fromSelectElement.options[iCount].childNodes[0].data.trim();       
            var appended = false;
            
            for(var jCount=0;jCount<toSelectElement.options.length;jCount++)
            {
                var currentText = toSelectElement.options[jCount].childNodes[0].data.trim();
                if(text.toUpperCase()<currentText.toUpperCase())
                {
                    toSelectElement.insertBefore(fromSelectElement.options[iCount], toSelectElement.options[jCount]);
                    appended = true;
                    break;
                }
            }
            if(appended==false)
            {
                toSelectElement.appendChild(fromSelectElement.options[iCount]);
            }
        }
    }
    
}

Utilities.SelectOptions = function(selectElement, values)
{
    var parts = values.split(",");
    if(parts.length==0) return;
    if(parts[0].trim()=="") return;
    for(var iCount=0;iCount<selectElement.options.length;iCount++)
    {
        selectElement.options[iCount].selected = false;
    }
    for(iCount=0;iCount<parts.length;iCount++)
    {
        for(var jCount=0;jCount<selectElement.options.length;jCount++)
        {
            if((parts[iCount]+"").trim().toUpperCase()==(selectElement.options[jCount].value+"").trim().toUpperCase())
            {
                selectElement.options[jCount].selected = true;
                break;
            }
        }
    }
}

Utilities.selectAllOptions = function(selectElement)
{
    for(var iCount=0;iCount<selectElement.options.length;iCount++)
    {
        selectElement.options[iCount].selected = true;
    }
}

Utilities.trimAllTextBox = function(obj)
{
    var inputs = obj.getElementsByTagName("input");
    var iCount;
    for(iCount=0;iCount<inputs.length;iCount++)
    {
        if(inputs[iCount].type.toUpperCase()=="TEXT")
        {
            inputs[iCount].value = inputs[iCount].value.trim();
        }
    }
    inputs = obj.getElementsByTagName("textarea");
    for(iCount=0;iCount<inputs.length;iCount++)
    {
        inputs[iCount].value = inputs[iCount].value.trim();
    }
}
Utilities.dateFormat = function(dt){
    if(dt==null)
      return "";
    var month = dt.getMonth() + 1;
    switch(month)
    {
        case 1:
            month="Jan";
            break;
        case 2:
            month="Feb";
            break;
        case 3:
            month="Mar";
            break;
        case 4:
            month="Apr";
            break;
        case 5:
            month="May";
            break;
        case 6:
            month="Jun";
            break;
        case 7:
            month="July";
            break;
        case 8:
            month="Aug";
            break;
        case 9:
            month="Sep";
            break;
        case 10:
            month="Oct";
            break;
        case 11:
            month="Nov";
            break;
        case 12:
            month="Dec";
            break;
    }
    var day = dt.getDate();
    var year = dt.getFullYear();
  //  if(month<10){ month = "0" + month;  }
    if(day<10){ day = "0" + day; }
    year = "" + year;
    var hour = dt.getHours(); 
    var minute = dt.getMinutes(); 
    var ampm = "AM";
    if(hour>11){
        ampm = "PM";
    }
    if (hour > 12) { hour = hour - 12; } 
    if (hour == 0) { hour = 12; } 
    if (minute < 10) { minute = "0" + minute; } 
    return month + " " + day + " " + year + "   " + hour + ":" + minute + " " + ampm;
}

Utilities.formatCurrency = function(num)
{
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num))
    num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100+0.50000000001);
    cents = num%100;
    num = Math.floor(num/100).toString();
    if(cents<10)
    cents = "0" + cents;
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
    num = num.substring(0,num.length-(4*i+3))+','+
    num.substring(num.length-(4*i+3));
    return (((sign)?'':'-') + '$' + num + '.' + cents);
}

Utilities.formatCurrencyWO = function(num)
{
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num))
    num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100+0.50000000001);
    cents = num%100;
    num = Math.floor(num/100).toString();
    if(cents<10)
    cents = "0" + cents;
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
    num = num.substring(0,num.length-(4*i+3))+','+
    num.substring(num.length-(4*i+3));
    return (((sign)?'':'-') + num + '.' + cents);
}

Utilities.checkemailfornewsletter = function(str){
    var fullEmail = str;
    if( fullEmail.indexOf("(") > 0 && fullEmail.indexOf(")") > 0 )
    {
        str = fullEmail.substring(fullEmail.indexOf("(") + 1,fullEmail.lastIndexOf(")"));
        str = str.trim();
    }    
    //alert("*" + str + "*");
    return Utilities.checkemail(str);
}
