
var DHTML = (document.getElementById || document.all || document.layers);

// Extended Tooltip Javascript
var DH = 0;
var an = 0;
var al = 0;
var ai = 0;
if (document.getElementById)
{ ai = 1; DH = 1; }
else {
    if (document.all) {
        al = 1;
        DH = 1;
    }
    else {
        browserVersion = parseInt(navigator.appVersion);

        if ((navigator.appName.indexOf('Netscape') != -1) && (browserVersion == 4)) {
            an = 1; DH = 1;
        }
    }
}

function fd(oi, wS) {
    if (ai) return wS ? document.getElementById(oi).style : document.getElementById(oi);
    if (al) return wS ? document.all[oi].style : document.all[oi];
    if (an) return document.layers[oi];
}


function pw() {
    return window.innerWidth != null ? window.innerWidth : document.body.clientWidth != null ? document.body.clientWidth : null;
}

function mouseX(evt) {
    if (evt.pageX)
        return evt.pageX;
    else
        if (evt.clientX)
        return evt.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
    else
        return null;
}

function mouseY(evt) {
    if (evt.pageY)
        return evt.pageY;
    else
        if (evt.clientY)
        return evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
    else
        return
    null;
}

function popUp(evt, oi) {
    if (DH) {
        var wp = pw();
        ds = fd(oi, 1);
        dm = fd(oi, 0);
        st = ds.visibility;

        //Get the Width of the Div
        if (dm.offsetWidth)
            ew = dm.offsetWidth;
        else
            if (dm.clip.width)
            ew = dm.clip.width;

        //Get the Height Of the Div
        if (dm.offsetHeight)
            eh = dm.offsetHeight;
        else
            if (dm.clip.height)
            eh = dm.clip.height;

        if (st == "visible" || st == "show") {
            ds.visibility = "hidden";
        }
        else {

            tv = mouseY(evt) - eh;
            //lv = mouseX(evt) - (ew/4); 
            lv = mouseX(evt);
            lv += 50;

            if (lv < 2)
                lv = 2;
            else
                if (lv + ew > wp)
                lv -= ew / 2;

            if (!an) {
                lv += 'px'; tv += 'px';
            }
            ds.left = lv;
            ds.top = tv;
            ds.visibility = "visible";
        }
    }
}

function HTMLEncode(s) {
    s = s.replace(/</g, "&lt;");
    s = s.replace(/>/g, "&gt;");
    return s;
}

function capLock(e, id) {
    kc = e.keyCode ? e.keyCode : e.which;
    sk = e.shiftKey ? e.shiftKey : ((kc == 16) ? true : false);
    if (((kc >= 65 && kc <= 90) && !sk) || ((kc >= 97 && kc <= 122) && sk))
        invi(0, id);
    else
        invi(1, id);
}

function getObj(name) {
    if (document.getElementById) {
        this.obj = document.getElementById(name);
        this.style = document.getElementById(name).style;
    }
    else if (document.all) {
        this.obj = document.all[name];
        this.style = document.all[name].style;
    }
    else if (document.layers) {
        this.obj = document.layers[name];
        this.style = document.layers[name];
    }
}

function checkinvi(cont) {
    if (!DHTML) return;
    var x = new getObj(cont);
    if (x.style.visibility == 'hidden') {
        return true
    } else if (x.style.visibility == 'visible') {
        return false
    }
}

function toggle(item) {
    if (!DHTML) return;
    var x = new getObj(item);
    if (x.style.visibility == 'hidden') {
        invi(0, item);
    }
    else {
        invi(1, item);
    }
}

function changeStatus(item) {
    if (!DHTML) return;
    var x = new getObj(item);
    if (x.style.visibility == 'hidden') {
        invi(0, item);
    }
    else {
        invi(1, item);
    }
}

function invi(flag, cont) {
    if (!DHTML) return;
    var x = new getObj(cont);

    x.style.visibility = (flag) ? 'hidden' : 'visible';
    x.style.display = (flag) ? 'none' : 'block';

}
function show(cont) {
    if (!DHTML) return;

}
function hide(cont) {
    if (!DHTML) return;
    $(cont).style.visibility = 'hidden';
    $(cont).style.display = 'none';
}

function checkEmail(name) {
    var filter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
    if (filter.test(document.getElementById(name).value))
        testresults = true
    else {
        alert('Invalid email address!')
        testresults = false
    }
    return (testresults)
}


function InsertText(input, insTexte) {

    startTag = '';
    endTag = '';

    if (input.createTextRange) {
        var text;
        input.focus(input.caretPos);
        input.caretPos = document.selection.createRange().duplicate();

        if (input.caretPos.text.length > 0) {
            input.caretPos.text = startTag + input.caretPos.text + endTag;
        }
        else {
            input.caretPos.text = startTag + "" + insTexte + " " + endTag;
        }
    }
    else
        input.value += startTag + insTexte + endTag;
}


function IsFaxPhoneChar() {
    if (event.keyCode != 8) {
        var myValue = String.fromCharCode(event.keyCode);
        event.returnValue = (IsNumeric(myValue)) ? myValue : "";
    }
}


function IsCountryCodeChar(obj, charCount) {
    if (event.keyCode != 8) {
        var myValue = String.fromCharCode(event.keyCode);
        event.returnValue = (IsCellPhone(myValue, charCount)) ? myValue : "";
    }
}

function IsNumeric(sText) {
    var ValidChars = "0123456789";
    var IsNumber = true;
    var Char;

    for (i = 0; i < sText.length && IsNumber == true; i++) {
        Char = sText.charAt(i);
        if (ValidChars.indexOf(Char) == -1) {
            IsNumber = false;
        }
    }
    return IsNumber;
}

function IsCellPhone(sText, charCount) {
    var ValidChars = "+0123456789 ";
    var IsNumber = true;
    var Char;

    for (i = 0; i < sText.length && IsNumber == true; i++) {
        Char = sText.charAt(i);
        if (charCount == 0 && Char == '+') {
            IsNumber = true;
        }
        else if (ValidChars.indexOf(Char) == -1) {
            IsNumber = false;
        }
    }
    return IsNumber;
}

function ConvertToCell(obj) {
    var strHoldText = ''
    strHoldText = obj.value;
    var strHoldNew = ''
    for (var i = 0; i < strHoldText.length; i++) {
        if (IsCellPhone(strHoldText.charAt(i), i) == true) {
            strHoldNew += strHoldText.charAt(i);
        }
    }
    obj.value = strHoldNew;
}

function IsNumber(sText) {
    var ValidChars = "0123456789";
    var IsNumber = true;
    var Char;

    Char = sText.charAt(0);
    if (ValidChars.indexOf(Char) == -1) {
        IsNumber = false;
    }

    return IsNumber;
}


function ConvertNumber(obj) {
    var strHoldText = ''
    strHoldText = obj.value;
    var strHoldNew = ''
    for (var i = 0; i < strHoldText.length; i++) {
        if (IsNumber(strHoldText.charAt(i)) == true) {
            strHoldNew += strHoldText.charAt(i);
        }
    }
    obj.value = strHoldNew;
}

function IsPhoneChar(sText) {
    var ValidChars = " ()-0123456789";
    var IsNumber = true;
    var Char;

    Char = sText.charAt(0);
    if (ValidChars.indexOf(Char) == -1) {
        IsNumber = false;
    }

    return IsNumber;
}


function ConvertPhoneNumber(obj) {
    var strHoldText = ''
    strHoldText = obj.value;
    var strHoldNew = ''
    for (var i = 0; i < strHoldText.length; i++) {
        if (IsPhoneChar(strHoldText.charAt(i)) == true) {
            strHoldNew += strHoldText.charAt(i);
        }
    }
    obj.value = strHoldNew;
}

function ConvertText(obj) {
    var strHoldText = ''
    strHoldText = obj.value;
    var strHoldNew = ''
    for (var i = 0; i < strHoldText.length; i++) {
        strHoldNew += strHoldText.charAt(i);
    }
    obj.value = strHoldNew;
}

function ConvertPhone(obj) {
    var strHoldText = '';
    strHoldText = obj.value;
    var strHoldNew = '';
    var i;
    for (i = 0; i < strHoldText.length; i++) {
        if (IsPhone(strHoldText.charAt(i), i) == true) {
            strHoldNew += strHoldText.charAt(i);
        }
    }
    obj.value = strHoldNew;
}

function IsPhone(sText, charCount) {
    var ValidChars = "0123456789";
    var IsValidPhone = true;


    if (charCount == 0 && sText == '+') {
        IsValidPhone = true;
    }
    else if (ValidChars.indexOf(sText) == -1) {
        IsValidPhone = false;
    }
    return IsValidPhone;
}

function allowNumeric(obj) {
    var temp = obj.value;
    var result = '';
    var i;
    for (var i = 0; i < temp.length; i++) {
        if (parseInt(temp.charAt(i)).toString() != 'NaN') {
            result += temp.charAt(i);
        }
    }
    obj.value = result;
}

function Trim1(obj) {
    var strHoldText = ''
    strHoldText = obj.value;
    var strHoldNew = ''
    for (var i = 0; i < strHoldText.length - 1; i++) {
        strHoldNew += strHoldText.charAt(i);
    }
    obj.value = strHoldNew;
}

function ConvertToDate(obj) {
    var strHoldText = ''
    strHoldText = obj.value;
    var strHoldNew = ''
    for (var i = 0; i < strHoldText.length; i++) {
        if (IsDate(strHoldText.charAt(i), i) == true) {
            strHoldNew += strHoldText.charAt(i);
        }
    }
    obj.value = strHoldNew;
}

function IsDate(sText, charCount) {
    var ValidChars = "/0123456789";
    var IsNumber = true;
    var Char;

    for (i = 0; i < sText.length && IsNumber == true; i++) {

        Char = sText.charAt(i);
        if (charCount == 0 && Char == '+') {
            IsNumber = true;
        }
        else if (ValidChars.indexOf(Char) == -1) {
            IsNumber = false;
        }
    }
    return IsNumber;
}

//What it does
//	Displays the amount of characters left in a lable that may be typed into a textbox and and pops up a msgbox 
//	to let user know when max amount has been reached 
//How to use
//Create a text box and a maching lable underneath
//For argument sake txtTextBox and lblLable
//lblLable text  = ""
//add the onkeypress and onkeyup events for txtTextBox
//e.g. 
//<asp:TextBox ID="txtTextBox" onkeypress="return CheckTextCount(this,'ctl00_ContentPlaceHolder1_lblLable',250);" onkeyup="return CheckTextCount(this,'ctl00_ContentPlaceHolder1_lblLable',250);" runat="server" Height="60px" TextMode="MultiLine" Width="200px">
//</asp:TextBox>
//<br />
//<asp:Label ID="lblLable" runat="server"></asp:Label>

//This example was made for dot net 2005
//For 2003 all you would need to change is the lable name you sent through "ctl00_ContentPlaceHolder1_lblLable" to what ever it need to be in 2003

function CheckTextCount(TextControl, DisplayControl, Max) {
    var strText = new String("");
    strText = TextControl.value;
    if (strText.length < Max) {
        document.getElementById(DisplayControl).innerText = (Max - strText.length) + ' characters left';
    }
    else {
        strText = TextControl.value;
        strText = strText.substr(0, Max);
        TextControl.value = strText;
        document.getElementById(DisplayControl).innerText = (Max - strText.length) + ' characters left';
        alert('Maximum Amount of Caracters Reached');
        return false;
    }
}


//What it does
//This is a support function for the function
//This function returns the count of the checkboxlist items for the name you provided
//String in Integer out

function GetListCount(Name) {
    var intCount = 1;
    var blnListEnd = false;
    while (blnListEnd == false) {
        try {
            var obj = new getObj(Name + '_' + intCount);
            if (obj == null) {
                blnListEnd = true;
                break;
            }
        }
        catch (e) {
            blnListEnd = true;
            break;
        }
        intCount++;
    }
    return (intCount);
}

// check whether an ID number is a valid South African ID number
function isValidSAIDNumber(id) {
    // constants
    var VALID_LENGTH = 13;
    var CONTROL_DIGIT_LOCATION = 12;
    var CONTROL_DIGIT_CHECK_VALUE = 10;
    var CONTROL_DIGIT_CHECK_EXCEPTION_VALUE = 9;
    re = /(((\d{2}((0[13578]|1[02])(0[1-9]|[12]\d|3[01])|(0[13456789]|1[012])(0[1-9]|[12]\d|30)|02(0[1-9]|1\d|2[0-8])))|([02468][048]|[13579][26])0229))(( |-)(\d{4})( |-)(\d{3})|(\d{7}))/;

    // assume that the id number is invalid
    var isValidID = false;

    // check for null value
    if (id != null) {
        // check length
        if (id.length == VALID_LENGTH) {
            // match regex pattern, only if length is valid
            if (re.test(id)) {
                //00 will slip through the regex and checksum
                if (id.substr(2, 2) != '00' && id.substr(4, 2) != '00') {
                    // check control digit, only if previous validations passed
                    var a = 0;
                    var b = 0;
                    var c = 0;
                    var cDigit = -1;
                    var tmp = 0;
                    var even = '';
                    var evenResult = null;

                    // sum odd digits
                    for (var i = 0; i < VALID_LENGTH - 1; i += 2) {
                        a += parseInt(id.charAt(i).toString());
                    }

                    // build a string containing even digits
                    for (var i = 1; i < VALID_LENGTH - 1; i = i + 2) {
                        even += (id.charAt(i).toString());
                    }

                    // multipy by 2
                    tmp = parseInt(even.toString()) * 2;

                    // convert back to string
                    evenResult = tmp.toString();

                    // sum the digits in evenResult
                    for (var i = 0; i < evenResult.length; i++) {
                        b += parseInt(evenResult.charAt(i).toString());
                    }

                    // sum odd digits sum and eventResult sum
                    c = a + b;

                    // subtract result above from check digit value
                    cDigit = CONTROL_DIGIT_CHECK_VALUE - parseInt(c.toString().charAt(1).toString());

                    // check if above result equals control digit value
                    if (cDigit == parseInt(id.charAt(CONTROL_DIGIT_LOCATION).toString())) {
                        isValidID = true;
                    } else {
                        if (cDigit > CONTROL_DIGIT_CHECK_EXCEPTION_VALUE) {
                            if (0 == parseInt(id.charAt(CONTROL_DIGIT_LOCATION).toString())) {
                                isValidID = true;
                            }
                        }
                    }
                }
            }
        }
    }
    return isValidID;
}

// Get radio button selected value
function getRadioButtonValue(id) {
    var inputs = $$('table#' + id + ' input');
    var labels = $$('table#' + id + ' label');
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].checked) {
            return labels[i].innerHTML;
            break;
        }
    }
    return null;
}
function getRadioButtonText(id) {
    var inputs = $$('table#' + id + ' input');
    var labels = $$('table#' + id + ' label');
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].checked) {
            return inputs[i].value;
            break;
        }
    }
    return null;
}

// Checks if checkbox with value in checkbox list with is is checked or not
function checkBoxListValueIsChecked(id, value) {
    var inputs = $$('table#' + id + ' input');
    var labels = $$('table#' + id + ' label');
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].checked && labels[i].innerHTML == value) {
            return true;
        }
    }
    return false;
}

function setRadioButton(id, value, checked, disabled) {
    var inputs = $$('table#' + id + ' input');
    var labels = $$('table#' + id + ' label');
    for (var i = 0; i < inputs.length; i++) {
        if (labels[i].innerHTML == value) {
            if (checked != null) {
                inputs[i].checked = checked;
            }
            if (disabled != null) {
                inputs[i].disabled = disabled;
            }
            return true;
        }
    }
    return false;
}


function checkBoxListAtLeastOneChecked(id) { //alert('me');
    var inputs = $$('table#' + id + ' input');
    //alert(inputs.length);
    for (var i = 0; i < inputs.length; i++) {
        //alert(inputs[i].checked);    
        if (inputs[i].checked) {
            return true;
        }
    }
    return false;
}


// Get drop down selected value
function getDropDownAttributeValue(id, attr) {
    var ddo = $(id);
    return ddo.options[ddo.selectedIndex].getAttribute(attr);
}


function getScreen(url, size) {
    if (url === null) { return ""; }

    size = (size === null) ? "big" : size;
    var vid;
    var results;

    results = url.match("[\\?&]v=([^&#]*)");

    vid = (results === null) ? url : results[1];

    if (size == "small") {
        return "http://img.youtube.com/vi/" + vid + "/1.jpg";
    } else {
        return "http://img.youtube.com/vi/" + vid + "/0.jpg";
    }
}

function openNewWindow(url, name, width, height) {
    var x = (document.body.offsetWidth / 2) - width / 2;
    var y = (screen.height / 2) - height / 2;
    window.open(url, 'child', 'width=' + width + ', height=' + height + ', top=' + y + ', left=' + x + ', status=1, scrollbars=1');
}

function CountCheckedValues(id) {
    var count = 0;
    var inputs = $$('table#' + id + ' input');
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].checked) {
            count++;
        }
    }
    return count;
}

function ClearValues(id) {

    var inputs = $$('table#' + id + ' input');
   
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].checked) {
            inputs[i].checked = false;
        }
    }


}


/* This script and many more are available free online at
The JavaScript Source :: http://javascript.internet.com
Created by: Will Bontrager :: http://willmaster.com/ */

/* For additional information about this JavaScript
and how to use it, see the "Displaying Number of Words
Typed Into Form Fields" article, linked from the archives
at from http://willmaster.com/possibilities/archives/
The above note and the copyright line must remain with
this JavaScript source code. Comments below this point
in the code may be removed if desired. */

// Customizing this JavaScript code requires specifying eight values.


//////////////////////////////////////////////////////
//                                                  //
//  No modfications are required below this point.  //
//                                                  //
//////////////////////////////////////////////////////

WordsMonitor = 0;

function CharLengthCheck(s, l) {
    if (s.length > l) {
        s = s.substring(0, l);
    }
    return s;
}

function InputCharacterLengthCheck(textBox, maxChars, labelCharsLeft, labelCharsTyped) {
    if (maxChars <= 0) {
        return;
    }
    var currentstring = new String();
    currentstring = textBox.value;
    var currentlength = currentstring.length;
    currentstring = CharLengthCheck(textBox.value, maxChars);
    if (labelCharsLeft != null) {
        var left = 0;
        left = maxChars - textBox.value.length;
        if (left < 0) {
            left = 0;
        }
        labelCharsLeft.innerHTML = left;
        if (currentstring.length < currentlength) {
            textBox.value = currentstring.substring(0);
        }
    }
    if (labelCharsTyped != null) {
        labelCharsTyped.innerHTML = currentstring.length;
        if (currentstring.length < currentlength) {
            textBox.value = currentstring.substring(0);
        }
    }
}

function WordLengthCheck(s, l) {
    WordsMonitor = 0;
    var f = false;
    var ts = new String();
    for (var vi = 0; vi < s.length; vi++) {
        vs = s.substr(vi, 1);
        if ((vs >= 'A' && vs <= 'Z') || (vs >= 'a' && vs <= 'z') || (vs >= '0' && vs <= '9') || (vs >= '-' && vs <= '-') || (vs >= '&' && vs <= '&')) {
            if (f == false) {
                f = true;
                WordsMonitor++;
                if ((l > 0) && (WordsMonitor > l)) {
                    s = s.substring(0, ts.length);
                    vi = s.length;
                    WordsMonitor--;
                }
            }
        }
        else { f = false; }
        ts += vs;
    }
    return s;
}

function GetWordCount(s) {
    var cnt = 0;
    var w = s.split(' ');
    for (var i = 0; i < w.length; i++) {
        if (w[i] != '') {
            cnt++;
        }
    }
    return cnt;
}



function InputWordLengthCheck(textBox, maxWords, labelWordsLeft, labelWordsTyped) {
    if (maxWords <= 0) {
        return;
    }
    var currentstring = new String();
    currentstring = textBox.val();
    
    var currentlength = currentstring.length;
    currentstring = WordLengthCheck(textBox.val(), maxWords);

    if (labelWordsLeft != null) {
        var left = maxWords - WordsMonitor;
        if (left < 0) {
            left = 0;
        }
        labelWordsLeft.html(left);
        if (currentstring.length < currentlength) {
            textBox.val(currentstring.substring(0));
        }
    }
    if (labelWordsTyped != null) {
        labelWordsTyped.html() = WordsMonitor;
        if (currentstring.length < currentlength) {
            textBox.val(currentstring.substring(0));
        }
    }
} 

