/*

function initialise () {

function validateFormat(field,format) {
function mandatory(field) {

function isValidDate(year, month, day) {
function isValidDateString(value){
function isLeapYear (y) {
function toDate(value){
function getDay(value){
function getMonth(value){
function getYear(value){
function compareDate(a,b){
function maskDate(value){
function setDateValue(fieldName,year,month,day){

function showCalendar(inputField){

function compareNum(a,b){
function formatNumber(value){

function getValue(field){
function getObjectValue(obj){ // get value from object
function getLabel(field){ // get label from object
function getObjectLabel(obj){
function setValue(obj,value){
function setObjectValue(obj,value){
function setLabel(obj,value){
function setObjectLabel(obj,value){


function lookupValue(valueArray,code){


function filterSelect(select,dataSetName,value){
function showHelp(message,title) {
function about() {
function showFind(url,field) {
function s(){

function setCookie(name,value) {
function getCookie(name) {
function deleteCookie(name) {
function makeSelection(selection) {


function checkLocation() {
function setVariables() {
function mouse_moveIE () {
function mouse_moveNS (mpos) {
function mouse_downIE () {
function mouse_downNS (mpos) {
function mouse_up () {
function showFieldName() {

function openHelpButtonUrl(urlStr){

*/

var netscape = (document.layers)? true:false;
var explorer =    (document.all)? true:false;

var current_src = null;

var top_offset  = 0;
var left_offset = 0;

function initialise () {


    // grid computed values
    if(gridNames[0]!=null){
        for(var i=0;i<gridColumns.length;i++){
            var g = document.getElementById(replaceIndex(gridColumns[i],0));
            if(g!=null && g.type != 'hidden'){
                try{
                    g.focus();
                }catch(er){
                }
                break;
            }
        }
        gridCompute();
    }

    // make the first tabpage visible
    if(tabpages[0]!=null){
        var tabPage = document.getElementById(tabpages[0]);
        tabPage.style.visibility='visible';
        tabPage.style.position='static';
    }        

}


function s(){
    for(var i=0;i<document.forms.length;i++){
        document.forms[i].style.visibility='hidden';
    }
}

function filterSelect(select,dataSetName,value,showAll){

    // readolny select appears as text; so check

    if (select.type == "select-one" || select.type == "select-multiple"){

        // reset and add empty option
        select.length =0;
        var opt = new Option();
        opt.value = ''; 
        opt.text = '';
        
        if(value != ''){ 
            value = value +'|';
            var codes = this[dataSetName+"_codes"];
            var labels = this[dataSetName+"_labels"];
            select.options[select.options.length] = opt;
            for(i=0; i<codes.length; i++) {
                if(codes[i].indexOf(value)==0){
                    var opt = new Option();
                    opt.value = codes[i]; 
                    opt.text = labels[i];
                    select.options[select.options.length] = opt;
                }
            }
        }else if(showAll){
            var codes = this[dataSetName+"_codes"];
            var labels = this[dataSetName+"_labels"];
            select.options[select.options.length] = opt;
            for(i=0; i<codes.length; i++) {
                var opt = new Option();
                opt.value = codes[i]; 
                opt.text = labels[i];
                select.options[select.options.length] = opt;
            }
        }            
        
//        eval("document."+select.form.name+"."+select.name+".onchange()");
    }else if(select.type=='hidden'){
        // readonly replace the text of the DIV id= name + "text"
        if(value != ''){ 
            value = value +'|';
            var codes = this[dataSetName+"_codes"];
            var labels = this[dataSetName+"_labels"];
            for(i=0; i<codes.length; i++) {
                if(codes[i].indexOf(value)==0){
                    var div = document.getElementById(select.name+"text");
                    div.innerText=labels[i];
                    var hd= document.getElementById(select.name);
                    hd.value=codes[i];
                    return;
                }
            }
        }
    }
    
    return true;
}

function mouse_moveIE () {
  if (current_src != null) {
    current_src.style.top  = event.clientY -  top_offset;
    current_src.style.left = event.clientX - left_offset;
  }
  return false;
}


function mouse_moveNS (mpos) {
  if (current_src != null) {
    document.current_src.top  = mpos.Y -  top_offset;
    document.current_src.left = mpos.X - left_offset;
  }
  return false;
}


function mouse_downIE () {
  if ((event.srcElement.className == "message") || (event.srcElement.className == "draggable")) {
    current_src = event.srcElement;
    //current_src.style.position = 'relative';
    top_offset  = event.clientY -  event.srcElement.style.pixelTop;
    left_offset = event.clientX - event.srcElement.style.pixelLeft;
  }
}


function mouse_downNS (mpos) {
  if ((mpos.srcElement.className == "message") || (mpos.srcElement.className == "draggable")) {
    current_src = mpos.srcElement;
    top_offset  = mpos.Y - mpos.srcElement.top;
    left_offset = mpos.X - mpos.srcElement.left;
  }
}


function mouse_up () {
  if (current_src != null) {
    current_src = null;
  }
}



function showHelp(message,title) {
    var helpWindow  = ""
    var helpContent = ""

    helpWindow = window.open("","Help","width=320,height=200,location=no,menubar=no,statusbar=no,resizable=yes,scrollbars=auto");
    
    helpContent = helpContent + "<html>\n\n<head>\n <title>Form Help</title>\n\n";
    helpContent = helpContent + "<style>\n\n body {\n  margin-top: 2px;\n  margin-left: 5px;\n  margin-right: 5px;\n";
    helpContent = helpContent + "  background-color: #66CCFF;\n }\n\n";
    helpContent = helpContent + " td {\n  font-family:Arial, Verdana, Helvetica, Helv;\n  color: black;\n  font-size: 12px;\n";
    helpContent = helpContent + "  font-style: italic;\n }\n\n";
    helpContent = helpContent + " h1 {\n  font-family:Arial, Verdana, Helvetica, Helv;\n  color: #000080;\n  font-size: 16px;\n";
    helpContent = helpContent + "  font-weight: bold;\n }\n\n";
    helpContent = helpContent + "</style>\n\n</head>\n\n<body scroll=\"auto\">\n";
    helpContent = helpContent + "<center><h1>" + title + "</h1></center>\n";
    helpContent = helpContent + "<table border=\"0\" width=\"100%\">\n<tr>\n<td width=\"100%\" align=\"justify\">";
    helpContent = helpContent + "<p align=\"justify\"><b>" + message + "</b></p></td>\n</tr>\n</table>";
    helpContent = helpContent + "<br>\n<center>\n";
    helpContent = helpContent + " <a href=\"javascript:window.close();\">close</a>\n</center>\n</body>\n\n</html>"
 
    helpWindow.document.write(helpContent);
    helpWindow.document.close();
}



function about() {
    msgWindow=window.open("about.htm","About","width=300,height=150,scrollbars=no")
}


function showFind(url,item) {
    // Store the form and field names in cookies
    var el = document.getElementById(item);
    setCookie("form",el.form.name);
    setCookie("field",item);

    // Open the select window
    selWindow=window.open(url,"Select","location=no,menubar=no,status=yes,resizable=yes,scrollbars=auto");
//    selWindow.resizeTo(selWindow.document.width+35,selWindow.document.body.scrollHeight+20);
}


function makeSelection() {

    // Retrieve the form and field names from cookies
    var formName = getCookie("form");
    var fieldName = getCookie("field");
    
    // Get the user selection
    var selValue = getValue("select");
    
    if(selValue==""){
        alert("Please, make a selection.");
        return false;
    }
    
    // Update the field in the main window
    var command = "self.opener.document" + "." + formName + "." + fieldName + ".value=\"" + selValue + "\"";
    eval(command);
    
    // Close the popup selection window
    window.close();
}

function showFieldName() {
    alert(fieldName);
}


function setVariables() {
    if (navigator.appName == "Netscape") {
      v=".top=";
      dS="document.";
      sD="";
      y="window.pageYOffset";
    } else {
      v=".pixelTop=";
      dS="";
      sD=".style";
      y="document.body.scrollTop";
    }
}


function checkLocation() {
    object="menu";
    yy=eval(y);
    eval(dS+object+sD+v+yy);
    setTimeout("checkLocation()",10);
}

function setCookie(name,value) {
    var expires = new Date();
    expires.setTime(expires.getTime() + (1000*60*60*24*31));
    document.cookie = name + "=" + escape(value) +
                      "; expires=" + expires.toGMTString() + "; path=/";
}

function getCookie(name) {
    var dcookie = document.cookie;
    var cname = name + "=";
    var clen = dcookie.length;
    var cbegin = 0;
    
    while(cbegin < clen) {
        var vbegin = cbegin + cname.length;
        if (dcookie.substring(cbegin,vbegin)==cname) {
            var vend = dcookie.indexOf(";",vbegin);
            if (vend == -1) {
                vend = clen;
            }
            return unescape(dcookie.substring(vbegin,vend));
        }
        cbegin = dcookie.indexOf(" ",cbegin) + 1;
        if (cbegin == 0) {
            break
        }
    }
    return null;
}

function deleteCookie(name) {
    document.cookie = name + "=" +
        "; expires=Thu, 01-Jan-70 00:00:01 GMT" + "; path=/";
    
}


function validateFormat(field,format,mandatory) {

//    alert(field.name+","+field.value+","+format+","+mandatory);
    if(field.value == ""){
        if(mandatory){
            field.style.backgroundColor="#FF0000";
            return false;
        }else{
            field.style.backgroundColor="#FFFFFF";
            return true;
        }
    }

    if(format == ""){
        return true;
    }
        
    switch (format) {
        case 'year':
          var PatternType = /^19\d{2}$|20\d{2}/;
          break;
        case 'visa-short':
          var PatternType = /^\d{16}$/;
          break;
        case 'visa-long':
          var PatternType = /^\d{4}-\d{4}-\d{4}-\d{4}$/;
          break;
        case 'date':
        case 'dd/mm/yyyy':
            if(isValidDateString(field.value)){
                field.style.backgroundColor="#FFFFFF";
                mask(field,'date');
                return true;
            }else{
            //alert(field.name);
                field.style.backgroundColor="#FF0000";
                return false;
            }

          break;
        case 'dd-mm-yyyy':
          var PatternType = /^\d{2}\-\d{2}\-\d{4}$/;
          break;
        case 'yyyy-mm-dd':
          var PatternType = /^\d{4}\-\d{2}\-\d{2}$/;
          break;
        case 'datetime':
        case 'timestamp':
          var PatternType = /^\d?\d\/(0?[1-9]|1[012])\/\d{4} \d\d\:\d\d$/;
          break;
        case 'char':
          var PatternType = /^[A-Za-z ]+$/;
          break;
        case 'integer':
        case 'num':
          var PatternType = /^([0-9]+)$/;
          break;
        case 'ninteger':
          var PatternType = /^[+-]?([0-9]+)$/;
          break;
        case 'decimal':
        case 'number':
            if(isValidPositiveNumberString(field.value)){
                field.style.backgroundColor="#FFFFFF";
                mask(field,'decimal');
                return true;
            }else{
                field.style.backgroundColor="#FF0000";
                return false;
            }
          break;
        case 'ndecimal':
            if(isValidNumberString(field.value)){
                field.style.backgroundColor="#FFFFFF";
                mask(field,'decimal');
                return true;
            }else{
                field.style.backgroundColor="#FF0000";
                return false;
            }
          break;
        case 'alpha':
          var PatternType = /^[A-Za-z0-9]+$/;
          break;
        case 'business':
            mask(field,'UPPER');
            if(checkDigit(field.value)){
                field.style.backgroundColor="#FFFFFF";
                return true;
            }else{
                field.style.backgroundColor="#FF0000";
                return false;
            }

          break;
        
        default:
          var PatternType = new RegExp("^"+format+ "$");
//        var PatternType = new RegExp();
//        var format = "custom";
    }


    var gotIt = PatternType.exec(field.value);
    if(!gotIt){
//        field.focus();
        field.style.backgroundColor="#FF0000";
        return false;
    }else{
        field.style.backgroundColor="#FFFFFF";
        return true;
    }
}

function mandatory(field) {

    // Field is MANDATORY and it is NULL --> give error!
    if(field.value == ""){
        field.style.backgroundColor="#FF0000";
        return false;
    }else{
        field.style.backgroundColor="#FFFFFF";
        return true;
    }
}

function mask(field,format) {

    if(field.value == ""){
        return true;
    }
    
    if(format == ""){
        return true;
    }
        
    switch (format) {
        case 'UPPER':
            field.value = field.value.toUpperCase();
            break;
        case 'lower':
            field.value = field.value.toLowerCase();
            break;
        case 'decimal':
            field.value = maskNumber(field.value);
            break;
        case 'date':
            field.value = maskDate(field.value);
            break;
    }
    return true;
}

function maskDate(value){
    pattern= /(\d{1,2})\/(\d{1,2})\/(\d{1,4})/;
    var gotIt = pattern.exec(value);
    if(!gotIt){
        pattern= /(\d{2})\/?(\d{2})?\/?(\d{1,4})?/;
        var gotIt = pattern.exec(value);
        if(!gotIt){
            var gotIt = pattern.exec(value);

            return value;
        }
    }
    
    var year = Number(RegExp.$3);
    if(RegExp.$3 ==""){
        year=(new Date()).getYear();
    }
    var month= Number(RegExp.$2);
    if(RegExp.$2 == ""){
        month=(new Date()).getMonth() +1;
    }
    var day= Number (RegExp.$1);
    
    if(year<100){
        year += 2000;
    }
    if(month<10){
        month = "0"+month;
    }
    if(day<10){
        day = "0"+day;
    }
    
    return day+"/"+month+"/"+year;
}


// date validations
var daysOfMonth = new Array();
daysOfMonth [1] = 31;
daysOfMonth [2] = 28;
daysOfMonth [3] = 31;
daysOfMonth [4] = 30;
daysOfMonth [5] = 31;
daysOfMonth [6] = 30;
daysOfMonth [7] = 31;
daysOfMonth [8] = 31;
daysOfMonth [9] = 30;
daysOfMonth [10] = 31;
daysOfMonth [11] = 30;
daysOfMonth [12] = 31;

function isValidDate(year, month, day) {
    if(year < 0)
        return false;
    if(year < 100)
        year +=2000;
    if(year <1900)
        return false;
    if(year>=2100)
        return false;
    if (month < 1 || month > 12)
        return false;
    if (day < 1)
        return false;
    if (month == 2 && isLeapYear(year))
        var dayLimit = 29;
    else 
        var dayLimit = daysOfMonth[month];
    if (day > dayLimit)
        return false;
        
    return true;
}

function isValidDateString(value){
    pattern= /(\d{1,2})\/(\d{1,2})\/(\d{1,4})/;
    var gotIt = pattern.exec(value);
    if(!gotIt){
        pattern= /(\d{2})\/?(\d{2})?\/?(\d{1,4})?/;
        var gotIt = pattern.exec(value);
        if(!gotIt){
            return false;
        }
    }

    var year = Number(RegExp.$3);
    if(RegExp.$3 ==""){
        year=(new Date()).getYear();
    }
    var month= Number(RegExp.$2);
    if(RegExp.$2 == ""){
        month=(new Date()).getMonth() + 1;
    }
    

//    alert(RegExp.$3+" "+RegExp.$2+" "+RegExp.$1);
    return isValidDate(year,month,Number(RegExp.$1));
}

function getDay(value){
    if(isValidDateString(value)){
        return Number(RegExp.$1);
    }else{
        return 0;
    }
}

function getMonth(value){
    if(isValidDateString(value)){
        return Number(RegExp.$2);
    }else{
        return 0;
    }
}

function getYear(value){
    if(isValidDateString(value)){
        return Number(RegExp.$3);
    }else{
        return 0;
    }
}
    

function toDate(value){
    pattern= /(\d{1,2})\/(\d{1,2})\/(\d{2,4})/;
    var gotIt = pattern.exec(value);
    if(!gotIt){
        return null;
    }else{
        return new Date(RegExp.$3,RegExp.$2,RegExp.$1);
    }
}

function isLeapYear (y) {
    return (y % 4 == 0  && (y % 400 == 0 || y % 100 != 0))
}

function compareNum(a,b){
    a=toNumber(a);
    b=toNumber(b);
    if(a>b){
        return 1;
    }else if(a == b){
        return 0;
    }else{
        return -1;
    }
}

function compareDate(as,bs){
    a=toDate(as);
    b=toDate(bs);
    if(a==null){
        return 1;
    }else if(b==null){
        return -1;
    }else if(a>b){
        return 1;
    }else if(a == b){
        return 0;
    }else{
        return -1;
    }
}


function setDateValue(fieldName,year,month,day){
    var field = document.getElementById(fieldName);
    if(year<100){
        year += 2000;
    }
    if(month<10){
        month = "0"+month;
    }
    if(day<10){
        day = "0"+day;
    }

    field.value=day+"/"+month+"/"+year;
}

// get value from object name
function getValue(field){
    var obj = document.getElementById(field);
    if(obj==null){
        return "";
    }
    return getObjectValue(obj);
}


// get value from object
function getObjectValue(obj){
    if(obj.type == "radio"){
        // get all radio's
        obj = document.getElementsByName(obj.name);
        for(var i=0;i<obj.length;i++){
            if(obj[i].checked){
                return obj[i].value;
            }
        }
        
        return "";
    }else if(obj.type == "checkbox"){
        return obj.checked;
    }else{
        return obj.value;
    }
}


function lookupValue(valueArray,code){
    var t=valueArray[code];
    return t==null?"":t;
}

// get label from object name
function getLabel(field){
    var obj = document.getElementById(field);
    if(obj==null){
        return "";
    }
    if(obj.type == "hidden"){
        obj = document.getElementById(field+"text");
        if(obj==null){
            return "";
        }
    }
    return getObjectLabel(obj);
}

// get lable from object
function getObjectLabel(obj){
    if(obj.tagName == "TH"){
        return obj.innerHTML;
    }else if(obj.tagName == "A"){
        return obj.innerHTML;
    }else if(obj.tagName == "DIV"){
        return obj.innerHTML;
    }else if(obj.type == "select-one"){
        for(var i =0;obj.options.length;i<i++){
            if(obj.value == obj.options[i].value){
                return obj.options[i].text;
            }
        }
        return "";
    }else{
        return getObjectValue(obj);
    }
}


// set label from object name
function setLabel(field,value){
    var obj = document.getElementById(field);
    if(obj==null){
        return;
    }
    if(obj.type == "hidden"){
        obj = document.getElementById(field+"text");
        if(obj==null){
            return;
        }
    }
    return setObjectLabel(obj,value);
}

// get lable from object
function setObjectLabel(obj,value){
    if(obj.tagName == "DIV"){
        obj.innerHTML=value;
    }else{
        return setObjectValue(obj,value);
    }
}


// get value from object name
function setValue(field,value){
    var obj = document.getElementById(field);
    if(obj==null){
        return "";
    }
    return setObjectValue(obj,value);
}


// get value from object
function setObjectValue(obj,value){
    if(obj.type == "radio"){
        // get all radio's
        obj = document.getElementsByName(obj.name);
        for(var i=0;i<obj.length;i++){
            if(obj[i].value == value){
            	obj[i].checked=true;
            }else{
            	obj[i].checked=false;
            }
        }
        
        return "";
    }else if(obj.type == "checkbox"){
        obj.checked= (value == 'true'|| value == '1');
    }else{
        obj.value=value;
    }
}


// compatibility functions

// IE5.0 - no Array.push()
function arrayPush(arr,el){
    arr[arr.length]=el;
}

/* remove */
function swap(a,pos1,pos2){
    a=Array(a);
    alert(a+","+pos1+","+pos2);
    var el1 = a[pos1];
    a[pos1]=a[pos2];
    a[pos2]=el1;
}

/* checks if inputed value complies wityh the Business Number Format */
function checkDigit(value){
    if (value.length > 9 || value.length < 9){
        alert("Business Number must be 9 characters.");
        return false;
    }else{
        var alphaArray = new Array('A','B', 'C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
        var header     = value.charAt(0);
        var checkChar  = value.charAt(value.length - 1);
        switch(header){
        case '0':
        case '1':
        case '3':
        case '7':
        case '9':
            var total = 0;
            for(var i=0; i<(value.length - 1); i++){
                var digit = value.charAt(i);
                var tmpDigit = 0;
                var tmpValue = (i+1) % 2;
                switch(digit){
                case '0': tmpDigit = (tmpValue == 0)?0:1;  break;
                case '1': tmpDigit = (tmpValue == 0)?1:0;  break;
                case '2': tmpDigit = (tmpValue == 0)?2:5;  break;
                case '3': tmpDigit = (tmpValue == 0)?3:7;  break;
                case '4': tmpDigit = (tmpValue == 0)?4:9;  break;
                case '5': tmpDigit = (tmpValue == 0)?5:13; break;
                case '6': tmpDigit = (tmpValue == 0)?6:15; break;
                case '7': tmpDigit = (tmpValue == 0)?7:17; break;
                case '8': tmpDigit = (tmpValue == 0)?8:19; break;
                case '9': tmpDigit = (tmpValue == 0)?9:21; break;
            }
            total += tmpDigit;
            }
            total = total % 26;
            if (alphaArray[total] == checkChar){
                return true;
            }else{
                alert('Invalid Business Number');
                return false;
            }
            break;
        default:
            alert('First Digit Must be 0, 1, 3, 7 or 9.');
            return false;
        }
    }
}


function showCalendar(inputField){
    
    var dateEl = document.getElementById(inputField);
    var mustCreate = false;
    var cal = window.calendar;
    if (!window.calendar) {
        window.calendar = cal = new Calendar(true, null, calendarOnSelect,function(cal) { cal.hide(); });
        cal.showsTime = false;
        cal.time24 = true;
        cal.weekNumbers = false;
        mustCreate = true;
    } else {
        cal.hide();
    }
    cal.setRange(1900, 2999);
    //cal.params = params;
    cal.setDateStatusHandler(null);
	cal.setDateFormat("%d/%m/%Y");
	if (mustCreate)
		cal.create();
	cal.parseDate(dateEl.value || dateEl.innerHTML);
	cal.inputField=dateEl;
	cal.refresh();
	cal.showAtElement(dateEl, "Bl");
	
    return true;
};


function calendarOnSelect(cal){
	if (cal.inputField && cal.dateClicked) {
		cal.inputField.value = cal.date.print("%d/%m/%Y");
        cal.callCloseHandler()		
	}
}    

function openHelpButtonUrl(urlStr){
    var reportWindow = window.open(urlStr, "Help", "width=800, height=600, scrollbars=yes menubar=no resizable=yes");
    reportWindow.document.close();
}
