/*
Anite Javascript Library
Copyright Anite Business Systems 2006

Note: ALL DOM elements should be identified by ID, not just by name
*/

//Get value of a field of id [name]
function GetValue(name)
{
    if(document.getElementById && document.getElementById(name))
    {
        if(document.getElementById(name).selectedIndex && document.getElementById(name).options)
        {
            return document.getElementById(name).options[document.getElementById(name).selectedIndex].value;
        }
        else
        {
            return document.getElementById(name).value;
        }
    }
    else if (document.all && document.all[name])
    {
        if(document.all[name].selectedIndex && document.all[name].options)
        {
            return document.all[name].options[document.all[name].selectedIndex].value;
        }
        else
        {
            return document.all[name].value;
        }
    }
    else
    {
        return "";
    }
}

//Set value of a field of id [name]
function SetValue(name, val)
{
    if(document.getElementById && document.getElementById(name))
    {
        if(!document.getElementById(name).options)
        {
            document.getElementById(name).value = val;
        }
        else
        {
            for(var i = 0; i < document.getElementById(name).options.length; i++)
            {
                if(document.getElementById(name).options[i].value == val)
                {
                    document.getElementById(name).selectedIndex = i;
                }
            }
        }
    }
    else if (document.all && document.all[name])
    {
        if(!document.all[name].options)
        {
            document.all[name].value = val;
        }
        else
        {
            for(var i = 0; i < document.all[name].options.length; i++)
            {
                if(document.all[name].options[i].value == val)
                {
                    document.all[name].selectedIndex = i;
                }
            }
        }
    }
}

//Set focus to a field of id [name]
function SetFocus(name)
{
    if(document.getElementById && document.getElementById(name))
    {
        document.getElementById(name).focus();
    }
    else if(document.all && document.all[name])
    {
        document.all[name].focus();
    }
}

//Show [show=true] or hide [show=false] a div of id [name]
function ToggleLayer(name, show)
{
    if (document.getElementById && document.getElementById(name))
    {
        // this is the way the standards work
        document.getElementById(name).style.display = show ? "block":"";
    }
    else if (document.all && document.all[name])
    {
        // this is the way old msie versions work
        document.all[name].style.display = show ? "block":"";
    }
    else if (document.layers && document.layers[name])
    {
        // this is the way nn4 works
        document.layers[name].style.display = show ? "block":"";
    }
}

//Returns true if element of id [name] is checked, false if not
function IsChecked(name)
{
    if(document.getElementById && document.getElementById(name))
    {
        return document.getElementById(name).checked;
    }
    else if (document.all && document.all[name])
    {
        return document.all[name].checked;
    }
    else
    {
        return false;
    }
}

//Sets InnerHTML of element [name] to value [val]
function SetInnerHTML(name, val)
{
    if(document.getElementById && document.getElementById(name))
    {
        document.getElementById(name).innerHTML = val;
    }
    else if(document.all && document.all[name])
    {
        document.all[name].innerHTML = val;
    }
}

//Disables element of id [name] - this is particularly useful for hyperlinks
function Disable(name)
{
    if(document.getElementById && document.getElementById(name))
    {
        if(document.links.item(name))
        {
            document.links.item(name).href = '#';
        }
        else
        {
            document.getElementById(name).disabled = true;
        }
    }
}


function GetElement(name)
{
    if(document.getElementById && document.getElementById(name))
    {
        return document.getElementById(name)
    }
    else if (document.all && document.all[name])
    {
        return document.all[name]
    }
    else
    {
        return false;
    }
}

//Get value of a radio group of id [name] 
function GetRadioValue(name, formName)
{
    var theForm = document.forms[formName];
    
    var el = theForm[name];
    
    if(el)
    {
        if ((el.type == 'radio') && (el.checked)) 
        {
            return el.value;
        }
        else
        {
	        for (counter = 0;  counter < el.length; counter++)
	        {
		        if (el[counter].checked)
		        {
			        return el[counter].value
		        }
	        }
	    }
	}
	return "";
}

//Preselct radio group [name] to item [index] -
//Note: needs form name [formname]
function PreSelectRadio(name, index, formName)
{
    //Initialise fields
    if (typeof(index) == "undefined" || index == "")
    {
        index = 0;
    }
    if(typeof(formName) == "undefined" || formName == "")
    {
        formName = "CriteriaForm";
    }
    var theForm = document.forms[formName];
    if(!theForm)
    {
        alert("The selected form does not exist on the page.");
        return;
    }
    
    if (theForm[name])
    {
        if (theForm[name].length)//&& document.getElementById(name).length > index)
        {
            if (theForm[name].length > index)
            {
                theForm[name][index].checked = true;
            }
        }
        else
        {
            //Only one radio button in the group
            theForm[name].checked = true;
        }
    }
}

//Checks for a valid number
function IsValidNumber(val)
{
    var filter=/^[0-9\+\-]+$/
    
    if (filter.test(val))
    {
        return true;
    }
    else 
    {
        return false;
    }
}
//Checks for a valid name
function IsValidName(val)
{
    var filter=/^[a-zA-Z\'\w]{2,}$/
    
    if (filter.test(val))
    {
        return true;
    }
    else 
    {
        return false;
    }
}
//Checks for a valid price
function IsValidPrice(val)
{
    var filter=/^\d{1,5}(\.\d{2})?$/
    
    if (filter.test(val))
    {
        return true;
    }
    else 
    {
        return false;
    }
}
//Checks for a valid phone number
function IsValidPhoneNumber(val)
{
    var filter=/^[\d|\s|\+]{10,15}$/
    
    if (filter.test(val))
    {
        return true;
    }
    else 
    {
        return false;
    } 
}
//Checks for a valid email
function IsValidEmail(val)
{
    var filter=/^.+@.+\..{2,4}$/

    if (filter.test(val))
    {
        return true;
    }
    else 
    {
        return false;
    }
}
//Checks for a valid credit card number
function IsValidCardNumber(cardNumber)
{
  var isValid = false;
  var ccCheckRegExp = /[^\d ]/;
  isValid = !ccCheckRegExp.test(cardNumber);

  if (isValid)
  {
    var cardNumbersOnly = cardNumber.replace(/ /g,"");
    var cardNumberLength = cardNumbersOnly.length;
    var numberProduct;
    var numberProductDigitIndex;
    var checkSumTotal = 0;

    for (digitCounter = cardNumberLength - 1; 
      digitCounter >= 0; 
      digitCounter--)
    {
      checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
      digitCounter--;
      numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
      for (var productDigitCounter = 0;
        productDigitCounter < numberProduct.length; 
        productDigitCounter++)
      {
        checkSumTotal += 
          parseInt(numberProduct.charAt(productDigitCounter));
      }
    }

    isValid = (checkSumTotal % 10 == 0);
  }

  return isValid;
}

var BeginOffsetDays = 14;
var MonthsIntoFuture = 18;
var YearsIntoFuture = 2;

var armonths=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");

//CMS - compatible if put in a cms-rendered page:
//gets server date
function GetServerDate()
{
    var serverDate = "<WC@TAG NAME="//SESSION/SERVERDATETIME"></WC@TAG>";
    if(serverDate.indexOf("WC@") == -1)
    {
        var now = new Date(serverDate.substr(6,4), Number(serverDate.substr(3,2))-1, serverDate.substr(0,2));
    }
    else
    {
        var now = new Date();
    }
    return now;
}

//Draw days in a drop down, format
//<option value="06">06</option>
//prePop in format "06"
function DrawDays(prePop, offsetDays)
{
	var selected = "";
	var padDate = "";
	var date = "";
	if(typeof(prePop) == "undefined" || prePop == ""){prePop = "";}
	if(typeof(offsetDays) == "undefined" || offsetDays == ""){offsetDays = BeginOffsetDays;}
	if(prePop != "")
	{
		date = Number(prePop);
	}
	else
	{
		var tempDate = GetServerDate();
		date = tempDate.getDate();
		date += offsetDays ;
		tempDate.setDate(date);
		date = tempDate.getDate();
	}

	for (var i=1; i<32; i++)
	{
		padDate = i;
		padDate = padDate.toString().pad(2,"0",0);
		//if(padDate.length == 1){padDate = "0" + padDate;}
		if(i == date){selected = "selected";}
		document.write('<option value="'+padDate+'" '+ selected +'>'+padDate+'</option>');
		selected = '';
	}
}

function PreSelectMonth(prePop, offsetDays, fieldName)
{
    var selected = "";
	var month = "";
	
	if(typeof(prePop) == "undefined" || prePop == ""){prePop = "";}
	if(typeof(offsetDays) == "undefined" || offsetDays == ""){offsetDays = BeginOffsetDays;}
	if(prePop != "")
	{
		month = Number(prePop);
		// Decrement to convert vb array to jscript array
		month--;
	}
	else
	{
		var tempDate = GetServerDate();
		var date = tempDate.getDate();
		date += offsetDays ;
		tempDate.setDate(date);
		month = Number(tempDate.getMonth() + 1);
	}
	SetValue(fieldName, month.toString().pad(2,"0",0));
}

//Draw months in a drop down, format 
//<option value="06">Jun</option>
//prePop format "06"
function DrawMonths(prePop, offsetDays)
{
	var selected = "";
	var month = "";
	
	if(typeof(prePop) == "undefined" || prePop == ""){prePop = "";}
	if(typeof(offsetDays) == "undefined" || offsetDays == ""){offsetDays = BeginOffsetDays;}
	if(prePop != "")
	{
		month = Number(prePop);
		// Decrement to convert vb array to jscript array
		month--;
	}
	else
	{
		var tempDate = GetServerDate();
		var date = tempDate.getDate();
		date += offsetDays ;
		tempDate.setDate(date);
		month = Number(tempDate.getMonth());
	}
	
	for (var i=0; i<12; i++)
	{	
		if(i == month)
		{
			selected = 'selected';
		}
		document.write('<option value="'+eval(i+1).toString().pad(2,"0",0)+'" ' + selected + '>'+armonths[i]+'</option>');
		selected = '';
	}
}

//Draw years in a dropdown, format
//<option value="2006">2006</option>
function DrawYears(prePop, offsetDays, noYears)
{
    var selected = "";
    var year = "";
    
    if(typeof(prePop) == "undefined" || prePop == ""){prePop = "";}
    if(typeof(offsetDays) == "undefined" || offsetDays == ""){offsetDays = BeginOffsetDays;}
    if(typeof(noYears) == "undefined" || noYears == ""){noYears = YearsIntoFuture;}
    if(prePop != "")
	{
		year = Number(prePop);
	}
	else
	{
		var tempDate = GetServerDate();
		var date = tempDate.getDate();
		date += offsetDays ;
		tempDate.setDate(date);
		year = Number(tempDate.getFullYear());
	}
	
	var curDate = GetServerDate();

    var i = curDate.getFullYear();
    
	while(i <= curDate.getFullYear() + noYears)
	{
	    if(i == year)
		{
			selected = 'selected';
		}
		document.write('<option value="'+ i.toString() +'">'+ i.toString() +'</option>');
		i++;
	}
}

//Draw months and years in a drop down, format 
//<option value="06-2006">Jun 2006</option>
function DrawMonthYears(prePop, offsetDays)
{
	var selected = "";
	var tempMonth = "";
	var tempYear = "";
	//var armonths=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
	if(typeof(prePop) == "undefined"){prePop = "";}
	if(typeof(offsetDays) == "undefined"){offsetDays = BeginOffsetDays;}
	var curDate = GetServerDate();
	curDate.setDate(1);
	
	if(prePop != "" && prePop.length == 4)
	{
		tempMonth = Number(prePop.substr(0,2));
		// Decrement to concert vb array to jscript array
		tempMonth --;
		tempMonth = tempMonth.toString().pad("0",2,1);
		tempYear = "20" + prePop.substr(2,2);
	}
	else
	{
		var tempDate = GetServerDate();
		var date = tempDate.getDate();
		date += offsetDays ;
		tempDate.setDate(date);
		tempMonth = tempDate.getMonth();
		tempYear = tempDate.getFullYear();
	}
	
	for (var i=0; i<=MonthsIntoFuture; i++)
	{
		var curMonth = curDate.getMonth();
		
		var curMonthStr = eval(curMonth + 1).toString();
		curMonthStr.pad(2,"0",0);

		var curYear = curDate.getFullYear();
		curYear = curYear.toString();
		
		//alert("curYear="+curYear+",tempYear="+tempYear+",CurMonth="+curMonth+", tempMonth="+tempMonth);
		if(curYear == tempYear && curMonth == tempMonth)
		{
			selected = 'selected';
		}
		document.write('<option value="'+curMonthStr+'-'+curYear+'" ' + selected + '>'+armonths[curMonth]+' '+curYear+'</option>');
		curDate.setMonth(curDate.getMonth() + 1);
		selected = '';
	}
}

String.prototype.pad = function(l, s, t){
	return s || (s = " "), (l -= this.length) > 0 ? (s = new Array(Math.ceil(l / s.length)
		+ 1).join(s)).substr(0, t = !t ? l : t == 1 ? 0 : Math.ceil(l / 2))
		+ this + s.substr(0, l - t) : this;
};
