// @version    $Id: forms.js 70 2008-05-06 08:39:45Z ondra $

/*
 * Form validators
 * @todo predelat
 */
function Form_Validate_NoEmpty() {}

Form_Validate_NoEmpty.prototype.isValid = function(obj) {
    if(eval(obj.value.length) == 0) {
        return false;
    } else {
        return true
    }
}

function Zend_Validate_Alpha() {}

Zend_Validate_Alpha.prototype.isValid = function(obj) {
    var charpos = obj.value.search("[^A-Za-z]");
    if(obj.value.length > 0 &&  charpos >= 0) {
        return false;
    } else {
        return true
    }
}

function Zend_Validate_Alnum() {}

Zend_Validate_Alnum.prototype.isValid = function(obj) {
    var charpos = obj.value.search("[^A-Za-z0-9]");
    if(obj.value.length > 0 &&  charpos >= 0) {
        return false;
    } else {
        return true
    }
}

function Zend_Validate_Int() {}

Zend_Validate_Int.prototype.isValid = function(obj) {
    var charpos = obj.value.search("[^0-9]");
    if(obj.value.length > 0 &&  charpos >= 0) {
        return false;
    } else {
        return true
    }
}

function Zend_Validate_EmailAddress() {}

Zend_Validate_EmailAddress.prototype.isValid = function(obj) {
    if(obj.value.length > 0 && !/.+@.+\..+./.test(obj.value)) {
        return false;
    } else {
        return true;
    }
}

function Form_Validate_Time() {}

Form_Validate_Time.prototype.isValid = function(obj) {
    if (obj.value.length == 0) {
        return true;
    }
    var re = new RegExp("^\(0[0-9]|1[0-9]|2[0-3]\)\:\([0-5][0-9]\)$");
    if(obj.value.match(re)) {
        return true;
    } else {
        return false;
    }
}

function Form_Validate_Date(format, delim) {
    this.format = format.split(delim);
    this.delim = delim;
}

Form_Validate_Date.prototype.isValid = function(obj) {
    var date = obj.value.split(this.delim);
    var day;
    var month;
    var year;
    var leap = false;

    if (obj.value.length == 0) {
        return true;
    }

    if (this.format.length != 3 || date.length != 3) {
        return false;
    }

    for (var i = 0; i < 3; i++) {
        switch (this.format[i]) {
            case 'dd': day = parseInt(date[i],10); break;
            case 'mm': month = parseInt(date[i],10); break;
            case 'yyyy': year = parseInt(date[i],10); break;
            default: return false;
        }
    }

    if ((year < 1) || (year > 2999)) {
        return false;
    }

    if ((month < 1) || (month > 12)) {
        return false;
    }
    if (day < 1) {
        return false;
    }
    if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
        leap = true;
    }
    if ((month == 2) && leap && (day > 29)) {
        return false;
    }
    if ((month == 2) && !leap && (day > 28)) {
        return false;
    }
    if ((day > 31) && ((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12))) {
        return false;
    }
    if ((day > 30) && ((month == 4) || (month == 6) || (month == 9) || (month == 11))) {
        return false;
    }
    return true;
}



function Form_Validate_FieldMatch(obj2) {
    this.obj2 = document.getElementById(obj2);
}

Form_Validate_FieldMatch.prototype.isValid = function(obj) {
    if(obj.value!=this.obj2.value) {
        return false;
    } else {
        return true
    }
}


/*
 * Form utils
 * @todo predelat
 */

function resetErrorLabel(name)
{
    var so = new String(name.className);
    if (so.indexOf("error")!=-1) {
        name.className=so.substring(0,so.indexOf(" error"));
    }
}

function setErrorLabel(name)
{
    var so = new String(name.className);
    if (so.indexOf("error")==-1) {
        name.className=name.className+" error";
    }
}

function ec_confirm(msg)
{
    return (confirm(unescape(msg)));
}

function ec_dialog(url)
{
    var sOptions = "toolbar=no,status=no,resizable=yes,dependent=yes,scrollbars=yes" ;
        sOptions += ",width=400";
        sOptions += ",height=300";
    window.open( url, 'ec_dialog', sOptions ) ;
}

/*
 * Double Select Element
 *
 */

var DoubleSelect = Class.create({
    initialize: function(box1, box2) {
        this.roles = document.getElementById(box1);
        this.inroles = document.getElementById(box2);
    },
    add: function(){
        var inrolesLength = this.inroles.length;
        var rolesLength = this.roles.length;
        var j = 0;
        for (var i = 0; i < rolesLength; i++) {
            if (this.roles.options[i].selected) {
                this.inroles.options[inrolesLength+j] = new Option(this.roles.options[i].text, this.roles.options[i].value);
                j++;
            }
        }
        rolesLength = this.roles.length;
        for (var i = rolesLength-1; i > -1 ; i--) {
            if (this.roles.options[i].selected) {
                this.roles.options[i] = null;
            }
        }
        this.sort(this.inroles);
    },
    remove: function() {
        var inrolesLength = this.inroles.length;
        var rolesLength = this.roles.length;
        var j = 0;
        for (var i = 0; i < inrolesLength; i++) {
            if (this.inroles.options[i].selected) {
                this.roles.options[rolesLength+j] = new Option(this.inroles.options[i].text, this.inroles.options[i].value);
                j++;
            }
        }
        inrolesLength = this.inroles.length;
        for (var i = inrolesLength-1; i > -1; i--) {
            if (this.inroles.options[i].selected) {
                this.inroles.options[i] = null;
            }
        }
        this.sort(this.roles);
    },

    submit: function() {
        for (var i = 0; i < this.inroles.length; i++) {
            this.inroles.options[i].selected = true;
        }
    },
    sort: function(sb) {
        var so = $A(sb.options);
        // TODO notworking IE6
        /*so.sort(function(a,b) {
            var c = a.text.localeCompare(b.text);
            if (c<0) {
                return -1;
            } else if(c>0) {
                return 1;
            } else {
                return 0;
            }
        });*/


        for (var i=0; i<(so.length-1); i++) {
            for (var j=i+1; j < so.length; j++) {
                if (so[i].text.localeCompare(so[j].text)>0) {
                    var tempText = so[i].text;
                    var tempValue = so[i].value;
                    so[i].text = so[j].text;
                    so[i].value = so[j].value;
                    so[j].text = tempText;
                    so[j].value = tempValue;
                }
            }
        }

        so.each(function(o,i) {
            sb.options[i] = o;
        });
    }
});


var CookieLib = Class.create({
    create: function(name,value,days) {
        if (days) {
            var date = new Date();
            date.setTime(date.getTime()+(days*24*60*60*1000));
            var expires = "; expires="+date.toGMTString();
        }
        else var expires = "";
        document.cookie = name+"="+value+expires+"; path=/";
    },

    read: function(name) {
        var nameEQ = name + "=";
        var ca = document.cookie.split(';');
        for(var i=0;i < ca.length;i++) {
            var c = ca[i];
            while (c.charAt(0)==' ') c = c.substring(1,c.length);
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
        }
        return null;
    },


    erase: function(name) {
        this.create(name,"",-1);
    }

});
