﻿//Copyright 2000-2008 SD Team. All rights reserved.

function DetectBrowser() {
    var temp = navigator.appName;
    temp = temp.toLowerCase();

    if (temp == 'microsoft internet explorer')
        return 'IE' + navigator.appVersion
    else
        return 'NS' + navigator.appVersion;
}

function OpenURL(URL, Form) {
    if (URL.length == 0 || URL == null)
        return (false);

    var form_length = Form.elements.length;
    var myform = Form;
    var mytype = '';
    var temp = URL + '?';

    for (var i = 0; i < form_length; i++) {
        mytype = myform.elements[i].type
        mytype = mytype.toLowerCase();
        if (mytype == 'text' || mytype == 'hidden' || mytype == 'select-one' ||
                    mytype == 'checkbox' || mytype == 'radio' || mytype == 'select-multiple') {
            var t = myform.elements[i].name
            if (t == null || t == '')
                t = myform.elements[i].id
            if (mytype == 'text' || mytype == 'hidden')
                temp = temp + t + "=" + escape(myform.elements[i].value);
            else if (mytype == 'checkbox' || mytype == 'radio')
                temp = temp + t + "=" + escape(myform.elements[i].checked);
            else if (mytype == 'select-one' || mytype == 'select-multiple')
                temp = temp + t + "=" + escape(myform.elements[i][myform.elements[i].selectedIndex].value);
            if (i < form_length - 1)
                temp = temp + "&";
        }
    }
    temp = temp.substring(temp, temp.length - 1)

    return temp;
}
function Abs(Number) {
    if (IsNumber(Number) == false) return false;
    if (Number < 0) return (Number * -1);
    return Number;

}
function Len(string) {
    if (string == null)
        return (false);

    return String(string).length;
}

function Chr(CharCode) {
    return String.fromCharCode(CharCode);
}

function Asc(string) {
    var symbols = " !\"#$%&'()*+'-./0123456789:;<=>?@";
    var loAZ = "abcdefghijklmnopqrstuvwxyz";
    symbols += loAZ.toUpperCase();
    symbols += "[\\]^_`";
    symbols += loAZ;
    symbols += "{|}~";
    var loc;
    loc = symbols.indexOf(string);
    if (loc > -1) {
        Ascii_Decimal = 32 + loc;
        return (32 + loc);
    }
    return (0);
}

function LTrim(String) {
    var i = 0;
    var j = String.length - 1;

    if (String == null)
        return (false);

    for (i = 0; i < String.length; i++) {
        if (String.substr(i, 1) != ' ' &&
                    String.substr(i, 1) != '\t')
            break;
    }

    if (i <= j)
        return (String.substr(i, (j + 1) - i));
    else
        return ('');
}

function RTrim(String) {
    var i = 0;
    var j = String.length - 1;

    if (String == null)
        return (false);

    for (j = String.length - 1; j >= 0; j--) {
        if (String.substr(j, 1) != ' ' &&
                        String.substr(j, 1) != '\t')
            break;
    }

    if (i <= j)
        return (String.substr(i, (j + 1) - i));
    else
        return ('');
}

function Trim(String) {
    if (String == null)
        return (false);

    return RTrim(LTrim(String));
}

function Left(String, Length) {
    if (String == null)
        return (false);

    return String.substr(0, Length);
}

function Right(String, Length) {
    if (String == null)
        return (false);

    var dest = '';
    for (var i = (String.length - 1); i >= 0; i--)
        dest = dest + String.charAt(i);

    String = dest;
    String = String.substr(0, Length);
    dest = '';

    for (var i = (String.length - 1); i >= 0; i--)
        dest = dest + String.charAt(i);

    return dest;
}

function Mid(String, Start, Length) {
    if (String == null)
        return (false);

    if (Start > String.length)
        return '';

    if (Length == null || Length.length == 0)
        return (false);

    return String.substr((Start - 1), Length);
}

function InStr(String1, String2) {
    var a = 0;

    if (String1 == null || String2 == null)
        return (false);

    String1 = String1.toLowerCase();
    String2 = String2.toLowerCase();

    a = String1.indexOf(String2);
    if (a == -1)
        return 0;
    else
        return a + 1;
}

function Sgn(Integer) {
    if (IsNumber(Integer)) return false;
    if (Integer == 0) return 0;
    if (Integer > 0) return 1;
    if (Integer < 0) return -1;
}

function LBound(array) {
    var i = 0;
    var temp = '';

    if (array.length == 0)
        return (-1);

    for (i = 0; i < array.length; i++) {
        temp = array[i]
        if (temp != null) {
            var temp = i;
            return temp;
        }
    }
    return (-1);
}

function UBound(array) {
    return (array.length - 1);
}

function Join(array, Delimiter) {
    var temp = '';

    if (array.length == 0)
        return '';

    if (Delimiter.length == 0)
        Delimiter = ' ';

    for (var i = 0; i < array.length; i++) {
        temp = temp + array[i]
        if (i < array.length - 1)
            temp = temp + Delimiter;
    }
    return temp;
}

function ReturnString(Number, Character) {
    var temp = '';

    if (Number < 1)
        return (false);

    if (Character.length == 0)
        return (false);

    if (Character.length > 1)
        Character = Character.charAt(0);

    for (var i = 0; i < Number; i++) {
        temp = temp + Character
    }

    return temp;
}

function Split(Expression, Delimiter) {
    var temp = Expression;
    var a, b = 0;
    var array = new Array();

    if (Delimiter.length == 0) {
        array[0] = Expression;
        return (array);
    }

    if (Expression.length == '') {
        array[0] = Expression;
        return (array);
    }

    Delimiter = Delimiter.charAt(0);

    for (var i = 0; i < Expression.length; i++) {
        a = temp.indexOf(Delimiter);
        if (a == -1) {
            array[i] = temp;
            break;
        }
        else {
            b = (b + a) + 1;
            var temp2 = temp.substring(0, a);
            array[i] = temp2;
            temp = Expression.substr(b, Expression.length - temp2.length);
        }
    }

    return (array);
}

function Space(Number) {
    var temp = '';

    if (Number < 1)
        return '';

    for (var i = 0; i < Number; i++) {
        temp = temp + ' ';
    }
    return temp;
}

function Replace(Expression, Find, Replace) {
    var temp = Expression;
    var a = 0;

    for (var i = 0; i < Expression.length; i++) {
        a = temp.indexOf(Find);
        if (a == -1)
            break
        else
            temp = temp.substring(0, a) + Replace + temp.substring((a + Find.length));
    }

    return temp;
}

function IsChar(Expression) {
    Expression = Expression.toLowerCase();
    RefString = "0123456789";

    if (Expression.length < 1)
        return (false);

    for (var i = 0; i < Expression.length; i++) {
        var ch = Expression.substr(i, 1)
        var a = RefString.indexOf(ch, 0)
        if (a != -1)
            return (false);
    }
    return (true);
}

function IsNumber(Expression) {
    RefString = "0123456789.-";

    if (Expression.length < 1)
        return (false);

    for (var i = 0; i < Expression.length; i++) {
        var ch = Expression.substr(i, 1)
        var a = RefString.indexOf(ch, 0)
        if (a == -1)
            return (false);
    }
    return (true);
}

function IsAlphanumeric(Expression) {
    Expression = Expression.toLowerCase();
    RefString = '";:/?!@#$%^&*()_=+\|~`abcdefghijklmnopqrstuvwxyz0123456789 ';

    if (Expression.length < 1)
        return (false);

    for (var i = 0; i < Expression.length; i++) {
        var ch = Expression.substr(i, 1)
        var a = RefString.indexOf(ch, 0)
        if (a == -1)
            return (false);
    }
    return (true);
}

function ReverseString(Expression) {
    if (Expression == null)
        return (false);

    var dest = '';
    for (var i = (Expression.length - 1); i >= 0; i--)
        dest = dest + Expression.charAt(i);
    return dest;
}
String.prototype.reverse = function() { return ReverseString(this) }

/* ----------------------------------------------------------------
ComboAdd: Add a new item to a SELECT HTML object at runtime.

Parameters:
Object = SELECT Object ID
Value  = Value of the String ... <option VALUE="?????">....</option>
String = String to add.

Returns: None
---------------------------------------------------------------- */
function ComboAdd(Object, Value, String) {
    Value = Trim(Value)
    String = Trim(String)

    if (Value.length < 1 || String.length < 1)
        return false

    Object[Object.length] = new Option(String, Value);
    Object.selectedIndex = Object.length;
}

/* ----------------------------------------------------------------
ComboDel: Delete the current/selected item from a SELECT
HTML object at runtime.

Parameters:
Object = SELECT Object ID

Returns: None
---------------------------------------------------------------- */
function ComboDel(Object) {
    var selected_index = Object.selectedIndex
    if (selected_index >= 0) {
        Object.options[Object.selectedIndex] = null;
        if (selected_index > 0)
            Object.selectedIndex = selected_index
        else
            Object.selectedIndex = 0;
    }
}

function FormatNumber(Expression, NumDigitsAfterDecimal) {
    var iNumDecimals = NumDigitsAfterDecimal;
    var dbInVal = Expression;
    var bNegative = false;
    var iInVal = 0;
    var strInVal
    var strWhole = "", strDec = "";
    var strTemp = "", strOut = "";
    var iLen = 0;

    if (dbInVal < 0) {
        bNegative = true;
        dbInVal *= -1;
    }

    dbInVal = dbInVal * Math.pow(10, iNumDecimals)
    iInVal = parseInt(dbInVal);
    if ((dbInVal - iInVal) >= .5) {
        iInVal++;
    }
    strInVal = iInVal + "";
    strWhole = strInVal.substring(0, (strInVal.length - iNumDecimals));
    strDec = strInVal.substring((strInVal.length - iNumDecimals), strInVal.length);
    while (strDec.length < iNumDecimals) {
        strDec = "0" + strDec;
    }
    iLen = strWhole.length;
    if (iLen >= 3) {
        while (iLen > 0) {
            strTemp = strWhole.substring(iLen - 3, iLen);
            if (strTemp.length == 3) {
                strOut = "," + strTemp + strOut;
                iLen -= 3;
            }
            else {
                strOut = strTemp + strOut;
                iLen = 0;
            }
        }
        if (strOut.substring(0, 1) == ",") {
            strWhole = strOut.substring(1, strOut.length);
        }
        else {
            strWhole = strOut;
        }
    }
    if (bNegative) {
        return "-" + strWhole + "." + strDec;
    }
    else {
        return strWhole + "." + strDec;
    }
}

function FormatCurrency(Expression) {
    var iNumDecimals = 2;
    var dbInVal = Expression;
    var bNegative = false;
    var iInVal = 0;
    var strInVal
    var strWhole = "", strDec = "";
    var strTemp = "", strOut = "";
    var iLen = 0;

    if (dbInVal < 0) {
        bNegative = true;
        dbInVal *= -1;
    }

    dbInVal = dbInVal * Math.pow(10, iNumDecimals)
    iInVal = parseInt(dbInVal);
    if ((dbInVal - iInVal) >= .5) {
        iInVal++;
    }
    strInVal = iInVal + "";
    strWhole = strInVal.substring(0, (strInVal.length - iNumDecimals));
    strDec = strInVal.substring((strInVal.length - iNumDecimals), strInVal.length);
    while (strDec.length < iNumDecimals) {
        strDec = "0" + strDec;
    }
    iLen = strWhole.length;
    if (iLen >= 3) {
        while (iLen > 0) {
            strTemp = strWhole.substring(iLen - 3, iLen);
            if (strTemp.length == 3) {
                strOut = "," + strTemp + strOut;
                iLen -= 3;
            }
            else {
                strOut = strTemp + strOut;
                iLen = 0;
            }
        }
        if (strOut.substring(0, 1) == ",") {
            strWhole = strOut.substring(1, strOut.length);
        }
        else {
            strWhole = strOut;
        }
    }
    if (bNegative) {
        return "-$" + strWhole + "." + strDec;
    }
    else {
        return "$" + strWhole + "." + strDec;
    }
}

function FormatPercent(Expression, NumDigitsAfterDecimal) {
    var iNumDecimals = NumDigitsAfterDecimal;
    var dbInVal = Expression * 100;
    var bNegative = false;
    var iInVal = 0;
    var strInVal
    var strWhole = "", strDec = "";
    var strTemp = "", strOut = "";
    var iLen = 0;

    if (dbInVal < 0) {
        bNegative = true;
        dbInVal *= -1;
    }

    dbInVal = dbInVal * Math.pow(10, iNumDecimals)
    iInVal = parseInt(dbInVal);
    if ((dbInVal - iInVal) >= .5) {
        iInVal++;
    }
    strInVal = iInVal + "";
    strWhole = strInVal.substring(0, (strInVal.length - iNumDecimals));
    strDec = strInVal.substring((strInVal.length - iNumDecimals), strInVal.length);
    while (strDec.length < iNumDecimals) {
        strDec = "0" + strDec;
    }
    iLen = strWhole.length;
    if (iLen >= 3) {
        while (iLen > 0) {
            strTemp = strWhole.substring(iLen - 3, iLen);
            if (strTemp.length == 3) {
                strOut = "," + strTemp + strOut;
                iLen -= 3;
            }
            else {
                strOut = strTemp + strOut;
                iLen = 0;
            }
        }
        if (strOut.substring(0, 1) == ",") {
            strWhole = strOut.substring(1, strOut.length);
        }
        else {
            strWhole = strOut;
        }
    }
    if (bNegative) {
        return "-" + strWhole + "." + strDec + "%";
    }
    else {
        return strWhole + "." + strDec + "%";
    }
}

/* ----------------------------------------------------------------
Mask: Returns a Boolean if the specified Expression match
the specified Mask.

Parameters:
Expression = String to validate
Mask       = String that can contain the following
options:
9 = only numbers (0..9)
X = only letters (a..z or A..Z)
* = Anything...
Example: alert(Mask("(954) 572-4419", "(999) 999-9999")); => TRUE
alert(Mask("33351-820", "99999-9999"));          => FALSE
alert(Mask("This is a test", "XXXXXX"));         => FALSE
alert(Mask("This 34 a test", "**************")); => TRUE

Returns: Boolean
---------------------------------------------------------------- */
function Mask(Expression, Mask) {
    Mask = Mask.toUpperCase();
    LenStr = Expression.length;
    LenMsk = Mask.length;
    if ((LenStr == 0) || (LenMsk == 0))
        return (false);
    if (LenStr != LenMsk)
        return (false);
    TempString = '';
    for (Count = 0; Count <= Expression.length; Count++) {
        StrChar = Expression.substring(Count, Count + 1);
        MskChar = Mask.substring(Count, Count + 1);
        if (MskChar == '9') {
            if (!IsNumber(StrChar))
                return (false);
        }
        else if (MskChar == 'X') {
            if (!IsChar(StrChar))
                return (false);
        }
        else if (MskChar == '*') {
            if (!IsAlphanumeric(StrChar))
                return (false);
        }
        else {
            if (MskChar != StrChar)
                return (false);
        }
    }
    return (true);
}
/* ----------------------------------------------------------------
AllowOnly: This function allow entering just the specified
Expression to a textbox or textarea control.

Parameters:
Expression = Allowed characters.
a..z => ONLY LETTERS
0..9 => ONLY NUMBERS
other symbols...

Example: use the onKeyPress event to make this function work:
//Allows only from A to Z
onKeyPress="AllowOnly('a..z');"

//Allows only from 0 to 9
onKeyPress="AllowOnly('0..9');"

//Allows only A,B,C,1,2 and 3
onKeyPress="AllowOnly('abc123');"

//Allows only A TO Z,@,#,$ and %
onKeyPress="AllowOnly('a..z|@#$%');"

//Allows only A,B,C,0 TO 9,.,,,+ and -
onKeyPress="AllowOnly('ABC|0..9|.,+-');"

Remarks: Use the pipe "|" symbol to separate a..z from 0..9 and symbols

Returns: None
---------------------------------------------------------------- */
function AllowOnly(Expression) {
    Expression = Expression.toLowerCase();
    Expression = Replace(Expression, 'a..z', 'abcdefghijklmnopqrstuvwxyz');
    Expression = Replace(Expression, '0..9', '0123456789');
    Expression = Replace(Expression, '|', '');

    var ch = String.fromCharCode(window.event.keyCode);
    ch = ch.toLowerCase();
    Expression = Expression.toLowerCase();
    var a = Expression.indexOf(ch);
    if (a == -1)
        window.event.keyCode = 0;
}

function IsDate(dateStr) {
    // Checks for the following valid date formats:
    // MM/DD/YYYY   MM-DD-YYYY

    var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;

    var matchArray = dateStr.match(datePat)
    if (matchArray == null)
        return false

    month = matchArray[1]
    day = matchArray[3]
    year = matchArray[4]
    if (month < 1 || month > 12)
        return false

    if (day < 1 || day > 31)
        return false

    if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31)
        return false

    if (month == 2) {
        var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
        if (day > 29 || (day == 29 && !isleap))
            return false;
    }
    return true;
}

/* ----------------------------------------------------------------
CheckBoxes: Checks, unchecks or switch the values of the
checkboxes in a form.

Parameters:
- f_form: String. Name of the Form <FORM...>
- Start : Number: Checkbox to start with (0 to start from
the first one
- Length: Number: How many checkboxes after the Start
you want to check, uncheck or switch
- Method: Strign: c = Check, u = Uncheck, s = Switch

Returns: None
---------------------------------------------------------------- */
function CheckBoxes(f_form, Start, Length, Method) {
    var s_type = ''

    Method = Method.toLowerCase()

    if (Start == 0) { Start = 0 } else { Start = Start - 1 }
    if (Length == 0) { Length = f_form.elements.length }

    for (var i = Start; i < Start + Length; i++) {
        s_type = f_form.elements[i]
        if (s_type.type == 'checkbox') {
            if (Method == 'c')
                s_type.checked = true
            if (Method == 'u')
                s_type.checked = false
            if (Method == 's')
                s_type.checked = !s_type.checked
        }
    }

    return
}

/* ----------------------------------------------------------------
DateDiff: Returns the Difference between two dates in weeks,
days, hours, minutes & seconds

Parameters:
- Date1: First Date
- Date2: Second Data

Returns: String containing the weeks, days, hours, minutes &
seconds between the two dates.
---------------------------------------------------------------- */
function DateDiff(Date1, Date2) {
    date1 = new Date();
    date2 = new Date();
    diff = new Date();

    date1temp = new Date(Date1);
    date1.setTime(date1temp.getTime());
    date2temp = new Date(Date2);
    date2.setTime(date2temp.getTime());

    diff.setTime(Math.abs(date1.getTime() - date2.getTime()));
    timediff = diff.getTime();

    weeks = Math.floor(timediff / (1000 * 60 * 60 * 24 * 7));
    timediff -= weeks * (1000 * 60 * 60 * 24 * 7);

    days = Math.floor(timediff / (1000 * 60 * 60 * 24));
    timediff -= days * (1000 * 60 * 60 * 24);

    hours = Math.floor(timediff / (1000 * 60 * 60));
    timediff -= hours * (1000 * 60 * 60);

    mins = Math.floor(timediff / (1000 * 60));
    timediff -= mins * (1000 * 60);

    secs = Math.floor(timediff / 1000);
    timediff -= secs * 1000;

    return (weeks + " weeks, " + days + " days, " + hours + " hours, " + mins + " minutes, and " + secs + " seconds");
}

/* ----------------------------------------------------------------
MinutesDiff: Returns the number of minutes between two dates.

Parameters:
- Date1: First date
- Date2: Second data

Returns: Number
---------------------------------------------------------------- */
function MinutesDiff(Date1, Date2) {
    date1 = new Date();
    date2 = new Date();
    diff = new Date();

    date1temp = new Date(Date1);
    date1.setTime(date1temp.getTime());

    date2temp = new Date(Date2);
    date2.setTime(date2temp.getTime());

    diff.setTime(Math.abs(date1.getTime() - date2.getTime()));
    timediff = diff.getTime();

    weeks = Math.floor(timediff / (1000 * 60 * 60 * 24 * 7));
    timediff -= weeks * (1000 * 60 * 60 * 24 * 7);

    days = Math.floor(timediff / (1000 * 60 * 60 * 24));
    timediff -= days * (1000 * 60 * 60 * 24);

    hours = Math.floor(timediff / (1000 * 60 * 60));
    timediff -= hours * (1000 * 60 * 60);

    mins = Math.floor(timediff / (1000 * 60));
    timediff -= mins * (1000 * 60);

    secs = Math.floor(timediff / 1000);
    timediff -= secs * 1000;

    return (mins + (hours * 60) + (days * 24 * 60) + (weeks * 7 * 24 * 60))
}

String.prototype.trim = function() {
    return Trim(this);
}

String.prototype.right = function(i) {
    return Right(this, i);
}

String.prototype.left = function(i) {
    return Left(this, i);
}

String.prototype.mid = function(st, co) {
    return Mid(this, st, co);
}

String.prototype.instr = function(str) {
    return InStr(this, str);
}

String.prototype.reverse = function() {
    return ReverseString(this);
}

Array.prototype.search = function(value) {
    // Returns true if the passed value is found in the
    // array. Returns false if it is not.

    var i;
    var ctr = 0;

    for (i = 0; i < this.length; i++) {
        // use === to check for Matches. ie., identical (===), ;
        if (this[i] == value) {
            return i;
        }
    }

    return -1;
};

// ---------------------------
// For Multi Dimensional Array
// ---------------------------
Array.prototype.search = function(value, Idx) {
    // Returns true if the passed value is found in the
    // array. Returns false if it is not.

    var i;
    var ctr = 0;

    for (i = 0; i < this.length; i++) {
        // use === to check for Matches. ie., identical (===), ;
        if (this[i][Idx] == value) {
            return i;
        }
    }

    return -1;
};

// Max
Array.prototype.max = function() {
    return Math.max.apply({}, this)
}

// Min
Array.prototype.min = function() {
    return Math.min.apply({}, this)
}


//String.prototype.


String.prototype.ltrim = function() {
    return LTrim(this);
}
String.prototype.rtrim = function() {
    return RTrim(this);
}

Number.prototype.abs = function() {
    return Abs(this);
}

function Cookie(name) {
    this.name = name;
}

Cookie.prototype.set = function(value, expires, path, domain, secure) {
    if (expires) {
        var date = new Date();
        date.setTime(date.getTime() + (expires * 86400000));
        var expires = "; expires=" + date.toGMTString();
    }

    document.cookie = this.name + '=' + escape(value)
    + (expires ? '; expires=' + expires : '')
    + ('; path=' + (path ? path : '/'))
    + (domain ? '; domain=' + domain : '')
    + (secure ? '; secure' : '');
}

Cookie.prototype.get = function() {
    if (!this.exists()) return;

    var nameEQ = this.name + '=';
    var cookies = document.cookie.split(';');

    for (current in cookies) {
        var c = cookies[current].replace(/^\s+/, '');
        if (c.indexOf(nameEQ) == 0) return c.substr(nameEQ.length);
    }
}

Cookie.prototype.drop = function() { this.set('', 0); }

Cookie.prototype.exists = function() {
    return (document.cookie.indexOf(this.name + '=') != -1);
}

function findInPage(str) {
    var NS4 = (document.layers);    // Which browser?
    var IE4 = (document.all);
    var win = window;    // window to search.
    var n = 0;
    var txt, i, found;
    if (str == "")
        return false;
    // Find next occurance of the given string on the page, wrap around to the
    // start of the page if necessary.
    if (NS4) {
        // Look for match starting at the current point. If not found, rewind
        // back to the first match.
        if (!win.find(str))
            while (win.find(str, false, true))
            n++;
        else
            n++;
        // If not found in either direction, give message.
        if (n == 0)
            alert("Not found.");
    }
    if (IE4) {
        txt = win.document.body.createTextRange();
        // Find the nth match from the top of the page.
        for (i = 0; i <= n && (found = txt.findText(str)) != false; i++) {
            txt.moveStart("character", 1);
            txt.moveEnd("textedit");
        }
        // If found, mark it and scroll it into view.
        if (found) {
            txt.moveStart("character", -1);
            txt.findText(str);
            txt.select();
            txt.scrollIntoView();
            n++;
        }
        // Otherwise, start over at the top of the page and find first match.
        else {
            if (n > 0) {
                n = 0;
                findInPage(str);
            }
            // Not found anywhere, give message.
            else
                alert("عبارت مورد نظر پیدا نشد");
        }
    }
    return false;
}


var fadeElement =
{
    initialise: function(obj) {
        // Set initial opacity for the object:
        fadeElement.setOpacity(obj, 20);

        // Add the object to objArray:
        fadeElement.objArray.push(obj);

        // Initialise the fadeState property:
        obj.fadeState = '';
        obj.onmouseover = function() { this.fadeState = 'fadingIn'; }
        obj.onmouseout = function() { this.fadeState = 'fadingOut'; }

        // Set a timer to call the fader method:
        if (!window.fadeTimer) window.fadeTimer = setInterval(fadeElement.fader, 50);
    },

    setOpacity: function(obj, opacity) {
        obj.style.filter = "alpha(opacity=" + opacity + ")"; // For IE filter to work, obj MUST have layout
        obj.style.KHTMLOpacity = opacity / 100; // Safari and Konqueror
        obj.style.MozOpacity = opacity / 100; // Old Mozilla and Firefox
        obj.style.opacity = opacity / 100; // CSS3 opacity for browsers that support it
    },

    fader: function() {
        // Loop through all objects in objArray:
        for (var i = 0; i < fadeElement.objArray.length; i++) {
            var obj = fadeElement.objArray[i];
            var opacity = obj.style.opacity * 100;

            // Check if the current object is animated:
            if ((obj.fadeState == 'fadingIn') && opacity < 100)
                fadeElement.setOpacity(obj, opacity + 10);
            else if ((obj.fadeState == 'fadingOut') && opacity > 20)
                fadeElement.setOpacity(obj, opacity - 10);
        }
    },

    objArray: [] // This array stores each object passed to the script.
}



var events = {
    add: function(obj, type, fn) {

        if (obj.addEventListener)
            obj.addEventListener(type, fn, false);
        else if (obj.attachEvent) {
            obj["e" + type + fn] = fn;
            obj[type + fn] = function() { obj["e" + type + fn](window.event); }
            obj.attachEvent("on" + type, obj[type + fn]);
        }
    },
    remove: function(obj, type, fn) {
        if (obj.removeEventListener)
            obj.removeEventListener(type, fn, false);
        else if (obj.detachEvent) {
            obj.detachEvent("on" + type, obj[type + fn]);
            obj[type + fn] = null;
            obj["e" + type + fn] = null;
        }
    }

}


function correctPNG() {
    var arVersion = navigator.appVersion.split("MSIE")
    var version = parseFloat(arVersion[1])
    if ((version >= 5.5) && (document.body.filters)) {
        for (var i = 0; i < document.images.length; i++) {
            var img = document.images[i]
            var imgName = img.src.toUpperCase()
            if (imgName.substring(imgName.length - 3, imgName.length) == "PNG") {
                var imgID = (img.id) ? "id='" + img.id + "' " : ""
                var imgClass = (img.className) ? "class='" + img.className + "' " : ""
                var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
                var imgStyle = "display:inline-block;" + img.style.cssText
                if (img.align == "left") imgStyle = "float:left;" + imgStyle
                if (img.align == "right") imgStyle = "float:right;" + imgStyle
                if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
                var strNewHTML = "<span " + imgID + imgClass + imgTitle
            + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
            + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
            + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>"
                img.outerHTML = strNewHTML
                i = i - 1
            }
        }
    }
}
var validation =
{
    MAC_Address: function(macaddr) {
        var reg1 = /^[A-Fa-f0-9]{1,2}\-[A-Fa-f0-9]{1,2}\-[A-Fa-f0-9]{1,2}\-[A-Fa-f0-9]{1,2}\-[A-Fa-f0-9]{1,2}\-[A-Fa-f0-9]{1,2}$/;
        var reg2 = /^[A-Fa-f0-9]{1,2}\:[A-Fa-f0-9]{1,2}\:[A-Fa-f0-9]{1,2}\:[A-Fa-f0-9]{1,2}\:[A-Fa-f0-9]{1,2}\:[A-Fa-f0-9]{1,2}$/;

        if (reg1.test(macaddr)) {
            return true;
        } else if (reg2.test(macaddr)) {
            return true;
        } else {
            return false;
        }
    },
    EMail: function(Expression) {
        if (Expression == null)
            return (false);

        var supported = 0;
        if (window.RegExp) {
            var tempStr = "a";
            var tempReg = new RegExp(tempStr);
            if (tempReg.test(tempStr)) supported = 1;
        }
        if (!supported)
            return (Expression.indexOf(".") > 2) && (Expression.indexOf("@") > 0);
        var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
        var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
        return (!r1.test(Expression) && r2.test(Expression));
    },
    IP_Address: function(ipaddr) {
        var re = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
        if (re.test(ipaddr)) {
            //split into units with dots "."
            var parts = ipaddr.split(".");

            //if the first unit is zero
            if (parseInt(parseFloat(parts[0])) == 0) {
                return false;
            }

            if (parseInt(parseFloat(parts[3])) == 0) {
                return false;
            }

            // if any part is greater than 255
            for (var i = 0; i < parts.length; i++) {
                if (parseInt(parseFloat(parts[i])) > 254) {
                    return false;
                }
            }

            return true;
        } else {
            return false;
        }
    }

}

function closeWindow() {
    if (navigator.appName == "Microsoft Internet Explorer") {
        this.focus();
        self.opener = this;
        self.close();
    }
    else {
        window.open('', '_parent', '');
        window.close();
    }
}
function PageLoad() {
    if (document.URL.substr(0, 4) != 'http') {
        document.clear()
        window.status = 'خطا! لطفا نرم افزار را از روی شبکه اجرا نمایید';
        document.write('<font align=center dir=rtl face=tahoma>خطا! لطفا نرم افزار را از روی شبکه اجرا نمایید و از حالت offline خارج شوید</font>');
        return false;
    }
    if (navigator.onLine == false) {
        document.clear()
        window.status = 'خطا! لطفا نرم افزار را از روی شبکه اجرا نمایید';
        document.write('<font align=center dir=rtl face=tahoma>خطا! لطفا نرم افزار را از روی شبکه اجرا نمایید و از حالت offline خارج شوید</font>');
        return false;
    }
    document.body.style.visibility = 'visible';
    window.status = "Copyright SD Team 2005-2008. All rights reversed.";


    correctPNG();
}

function handleErrors(msg, url, line) {
    var errorString = "JavaScript Error Occured\n";
    errorString += "Message: " + msg + "\n";
    errorString += "Url: " + url + "\n";
    errorString += "Line: " + line;

    alert(errorString);

    return true;
}

function nav(a) {
    document.location.replace(a);
    open(a, "_self");
    try {
        document.URL = a;
    } catch (e) {
    }
    try {
        navigate(a);
    } catch (e) {
    }
}

/* ----------------------------------------------------------------
Tips
**************************************************************/

/*
- Want to keep a window in top of other?
use: <body onblur="self.focus()"> on the window you want to
keep in top

- Want to make a textbox read only?
use: <INPUT TYPE="text" NAME="output" SIZE="30" onFocus="this.blur()">

- Want to highlight the whole textbox or textarea box?
use: <INPUT TYPE="text" NAME="output" SIZE="30" onFocus="this.select();">
*/
function Random(a) {
    //    var da = new Date();
    //    var t = da.getMilliseconds() / 1000;
    var t = Math.random();
    t = Math.round(t * a) + 1;
    if (t > a) t = a;
    return t;
}
function SelectAll(t) {
    t.select();
}

function refresh() {
    history.go(0);
}
function doTrans(objid, inner, ef) {
    var a = document.getElementById(objid);
    if (ef == 'rnd') {
        if (Random(2) == 2) {
            ef = 'fade';
        } else {
            ef = 'pix';
        }
    }
    if (ef == 'fade') {
        a.style.filter = 'progid:DXImageTransform.Microsoft.Fade(Overlap=1.00)';
    }
    if (ef == 'pix') {
        a.style.filter = 'progid:DXImageTransform.Microsoft.Pixelate(MaxSquare=50);';
    }
    a.filters[0].apply();
    a.innerHTML = inner;
    a.filters[0].play();
}
