//----------------------------------------------------------------------------------------------------
//  javascript functions - flip
//----------------------------------------------------------------------------------------------------

// flip()
// opens or closes div layer, changes class of the link and saves status in cookie
function flip(divId, linkId, openOrclosed, animate)
{
    var newStatus = (document.getElementById(divId).style.display == 'none') ? 'open' : 'closed';

    if (openOrclosed != undefined && openOrclosed != '' && ((openOrclosed == 'open' && newStatus != 'open') || (openOrclosed == 'closed' && newStatus != 'closed'))) {
        return true;
    }

    // change link class
    if (linkId !== undefined) {
        $('#' + linkId).removeClass('open');
        $('#' + linkId).removeClass('closed');
        $('#' + linkId).addClass(((newStatus == 'open') ? 'open' : 'closed'));
    }

    // save setting in cookie
    __setCookie(divId, ((newStatus == 'open') ? 'true' : ''));

    // show/hide div
    if (newStatus == 'open') {
        if (animate != undefined && animate == 'blind') {
            $('#' + divId).effect('blind', { 'direction': 'horizontal', 'mode': 'show' }, 'fast');
        }
        else if (animate != undefined && animate == 'blind_vert') {
            $('#' + divId).effect('blind', { 'direction': 'vertical', 'mode': 'show' }, 'fast');
        }
        else {
            document.getElementById(divId).style.display = 'block';
        }
    }
    else {
        if (animate != undefined && animate == 'blind') {
            $('#' + divId).effect('blind', { 'direction': 'horizontal', 'mode': 'hide' }, 'fast');
        }
        else if (animate != undefined && animate == 'blind_vert') {
            $('#' + divId).effect('blind', { 'direction': 'vertical', 'mode': 'hide' }, 'fast');
        }
        else {
            document.getElementById(divId).style.display = 'none';
        }
    }
 
    return false;
}


// __setCookie()
// helper function for flip()
// sets cookie value
function __setCookie(name, value)
{
    if (name != '' && name !== undefined) {
        var newValue        = '';
        var oldCookie       = __eatCookie('flip');

        // get old cookie values
        if (oldCookie != '' && oldCookie !== undefined) {
            oldCookie = oldCookie.split('|');
            for (i = 0; i < oldCookie.length; i++) {
                if (oldCookie[i] != name) {
                    newValue += ((newValue != '') ? '|' : '') + oldCookie[i];
                }
            }
        }

        // add new value
        if (value != '' && value !== undefined) {
            newValue += ((newValue != '') ? '|' : '') + name;
        }
    
        var expdate = new Date();
        expdate.setTime(expdate.getTime() + (31 * 24 * 60 * 60 * 1000));

        document.cookie = 'flip=' + newValue + ';path=/;expires=' + expdate.toUTCString();
    }
}


// __eatCookie()
// helper function for flip()
// gets cookie
function __eatCookie(name)
{
    var arg   = name + '=';
    var alen  = arg.length;
    var clen  = document.cookie.length;
    var i     = 0;

    while (i < clen) {
        var j = i + alen;
        if (document.cookie.substring(i,j) == arg) {
            return __eatCookieVal(j);
        }

        i = document.cookie.indexOf(' ', i) + 1;
        if (i === 0) { break; }
    }

    return '';
}


// __eatCookieVal()
// helper function for __eatCookieVal()
// gets cookie value
function __eatCookieVal(offset)
{
    var endstr = document.cookie.indexOf(';', offset);
    if (endstr == -1) { endstr = document.cookie.length; }
    return unescape(document.cookie.substring(offset, endstr));
}


//----------------------------------------------------------------------------------------------------
//  javascript functions - misc
//----------------------------------------------------------------------------------------------------

// setField()
// sets default value for an input field and updates css classes
function setField(field, text)
{
    if (field.value == '') {

        // set default value
        field.value = text;

        // look for 'light' class
        var classFound  = false;
        var className   = '';
        var classNames  = field.className.split(' ');
        for (var i = 0; i < classNames.length; i++) {
            className = ((className != '') ? className + ' ' : '') + classNames[i];
            if (classNames[i] == 'light') {
                classFound = true;
            }
        }

        // add 'light' class if not found
        if (classFound != true) {
            className = className + ' light';
        }

        // update field class
        field.className = className;
    }
}


// unsetField()
// unsets default value for an input field and updates css classes
function unsetField(field, text)
{
    if (field.value == text) {

        // unset default value
        field.value = '';

        // cut 'light' class
        var className   = '';
        var classNames  = field.className.split(' ');
        for (var i = 0; i < classNames.length; i++) {
            if (classNames[i] != 'light') {
                className = ((className != '') ? className + ' ' : '') + classNames[i];
            }
        }

        // update field class
        field.className = className;
    }
}


// autoDropdown()
// show/hide input field for new value
function autoDropdown(field)
{
    if (document.getElementById(field).value == '__new__') {
        document.getElementById(field + '_new').style.display = 'block';
    }
    else {
        document.getElementById(field + '_new').style.display = 'none';
    }
}


// disableCheckboxes()
// disable all checkboxes in form except the clicked checkbox (field)
// if field is not checked, all other checkboxes will be enabled
function disableCheckboxes(field)
{
    formId = field.form;
    for (var i = 0; i < formId.elements.length; i++) {
        if (formId.elements[i].name == field.name && formId.elements[i] != field) {
            formId.elements[i].disabled = (field.checked == true) ? true : false;
        }
    }
}


//----------------------------------------------------------------------------------------------------
//  php functions
//----------------------------------------------------------------------------------------------------

function number_format( number, decimals, dec_point, thousands_sep )
{
    var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;
    var d = dec_point == undefined ? "." : dec_point;
    var t = thousands_sep == undefined ? "," : thousands_sep, s = n < 0 ? "-" : "";
    var i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
    return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
}


function strpos( haystack, needle, offset)
{
    var i = (haystack+'').indexOf( needle, offset ); 
    return i===-1 ? false : i;
}


function substr( f_string, f_start, f_length )
{
    f_string += '';
 
    if(f_start < 0) {
        f_start += f_string.length;
    }
 
    if(f_length == undefined) {
        f_length = f_string.length;
    } else if(f_length < 0){
        f_length += f_string.length;
    } else {
        f_length += f_start;
    }
 
    if(f_length < f_start) {
        f_length = f_start;
    }
 
    return f_string.substring(f_start, f_length);
}


function is_int( mixed_var )
{
    var y = parseInt(mixed_var * 1);
    
    if (isNaN(y)) {
        return false;
    }
    
    return mixed_var == y && mixed_var.toString() == y.toString(); 
}


function str_replace (search, replace, subject, count) {
    var i = 0, j = 0, temp = '', repl = '', sl = 0, fl = 0,
            f = [].concat(search),
            r = [].concat(replace),
            s = subject,
            ra = r instanceof Array, sa = s instanceof Array;
    s = [].concat(s);
    if (count) {
        this.window[count] = 0;
    }

    for (i=0, sl=s.length; i < sl; i++) {
        if (s[i] === '') {
            continue;
        }
        for (j=0, fl=f.length; j < fl; j++) {
            temp = s[i]+'';
            repl = ra ? (r[j] !== undefined ? r[j] : '') : r[0];
            s[i] = (temp).split(f[j]).join(repl);
            if (count && s[i] !== temp) {
                this.window[count] += (temp.length-s[i].length)/f[j].length;}
        }
    }
    return sa ? s : s[0];
}

