if(location.hostname!='www.qindex.info' && location.hostname!='qindex.info' && location.hostname!='211.233.11.177')
    window.alert('Q_vldtn.js is requested outside of Qindex.info');

var Q_vldtn = {
/*
Created: 2004-06-08
Last Updated: 2008-11-22
By: Qindex.info
More... http://www.qindex.info/Q_get.php?g_clss=forum&g_prcss=thrd&g_tmplt=&g_brd=5&g_thrd=7
*/
     ghosts : new Array()
    ,wtngs  : new Array()


    // is, get, create functions
    ,get_bytes : function(strng) {
        var prcnts = strng.split('%').length-1;
        return strng.length-2*prcnts;
    }
    ,is_leap : function(strng) {
        if(strng.length==0 || isNaN(strng)) return false;
        if(strng%4==0) {
            if(strng%100==0) {
                if(strng%400) return true;
                else return false;
            } else return true;
        } else return false;
    }
    ,is_email : function(strng) {
        re1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
        re2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");
        if( re1.test(strng) || !re2.test(strng) ) return false;
        return true;
    }
    ,is_RIN_Kr : function(strng) {
        re = /^[0-9]{3}-[0-9]{2}-[0-9]{5}$/;
        if (!re.test(strng)) return false;
        strng_new = strng.replace(/^([0-9]{3})-([0-9]{2})-([0-9]{5})$/,"$1$2$3");
        strng_add = "137137135";
        var tmp = 0;
        for(n=0; n<9; n++) tmp += strng_new.charAt(n)*strng_add.charAt(n);
        tmp += strng_new.charAt(8)*5/10;
        tmp = (10 - (tmp % 10))%10;
        if (tmp!=strng_new.charAt(9)) return false;
        return true;
    }
    ,is_SSN_Kr : function(strng) {
        re = /^[0-9]{6}-?[0-9]{7}$/;
        if (!re.test(strng)) return false;
        strng_new = strng.replace("-","");
        var year   = parseInt(strng_new.substr(0,2),10);
        var month  = parseInt(strng_new.substr(2,2),10);
        var day    = parseInt(strng_new.substr(4,2),10);
        var gender = parseInt(strng_new.charAt(6)  ,10);
        if ( month<1 || month>12 || gender<1 || gender>4 ) return false;

        var arrayOfLasts = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
        if(month==2) {
            year += (gender<3 ? 1900 : 2000);
            if(Q_is_leap_year(year)) arrayOfLasts[1] = 29;
        }
        if(day<1 || day>arrayOfLasts[month-1]) return false;

        var tmp = 0;
        for(var n=0; n<12; n++) tmp += (n%8+2) * parseInt(strng_new.charAt(n),10);
        tmp = (11-(tmp%11))%10;
        if (tmp != strng_new.charAt(12)) return false;
        return true;
    }
    ,create_SSN_Kr : function(year,month,day,gender) { //gender: male, female
        var strng = '';
        strng += year%100;
        if(month<10) strng += '0';
        strng += month;
        if(day<10) strng += '0';
        strng += day;
        var crrnt = new Date();
        if(year>1900 && year<2000) {
            if     (gender=='male'  ) strng += '1';
            else if(gender=='female') strng += '2';
        } else if(year>2000 && year<=crrnt.getUTCFullYear()) {
            if     (gender=='male'  ) strng += '3';
            else if(gender=='female') strng += '4';
        }
        for(n=0; n<5; n++) strng += Math.round(Math.random()*10);
        var tmp = 0;
        for(var n=0; n<12; n++)
            tmp += (n%8+2) * parseInt(strng.charAt(n),10);
        tmp = (11-(tmp%11))%10;
        strng += tmp;
        return strng;
    }


    ,validate : function(objct) {
        for(i=0; i<Q_vldtn.ghosts.length; i++) {
            if(Q_vldtn.ghosts[i].form==objct && Q_vldtn.ghosts[i].rqrd) {
                if(!Q_vldtn.ghosts[i].fnctn()) return false;
            }
        }
        return true;
    }
    ,create : function(objct,attrbt) {
        var G = this;
        this.objct = objct;
        var arry = attrbt.split(',');
        this.form  = objct.form;
        this.type  = objct.type;
        this.evnt  = arry[0];
        this.chck  = arry[1];
        this.rqrd  = eval(arry[2]);
        if(arry.length>=4) this.optn_1 = arry[3];
        switch(this.chck) {
            case 'empty' :
                this.fnctn = function() {
                    if(G.objct.value.length==0) {
                        var wrnng = 'Empty.';
                        window.alert(wrnng);
                        G.objct.focus();
                        return false;
                    }
                    return true;
                };
                break;
            case 'bytes' :
                this.fnctn = function() {
                    var strng = G.objct.value;
                    var bts = Q_vldtn.get_bytes(strng);
                    if(bts>G.optn_1) {
                        var wrnng = '"'+strng+'" exceeds '+G.optn_1+' bytes.';
                        window.alert(wrnng);
                        while(bts>G.optn_1) {
                            strng = strng.substr(0,strng.length-1);
                            bts = Q_vldtn.get_bytes(strng);
                        }
                        G.objct.value = strng;
                    }
                };
                break;
            case 'email' :
                this.fnctn = function() {
                    var strng = G.objct.value;
                    if(!Q_vldtn.is_email(strng)) {
                        var wrnng = '"'+strng+'" is not a valid Email.';
                        window.alert(wrnng);
                        G.objct.focus();
                        return false;
                    }
                    return true;
                };
                break;
            case 'RIN_Kr' :
                this.fnctn = function() {
                    var strng = G.objct.value;
                    if(!Q_vldtn.is_RIN_Kr(strng)) {
                        var wrnng = '"'+strng+'" is not a valid Korean RIN.';
                        window.alert(wrnng);
                        G.objct.focus();
                        return false;
                    }
                    return true;
                };
                break;
            case 'SSN_Kr' :
                this.fnctn = function() {
                    var strng = G.objct.value;
                    if(!Q_vldtn.is_SSN_Kr(strng)) {
                        var wrnng = '"'+strng+'" is not a valid Korean SSN.';
                        window.alert(wrnng);
                        G.objct.focus();
                        return false;
                    }
                    return true;
                };
                break;
            case 'match' :
                this.fnctn = function() {
                    var strng_1 = G.objct.value;
                    var anthr = document.getElementById(G.optn_1);
                    var name = anthr.getAttribute('name');
                    var strng_2 = anthr.value;
                    if(strng_1 != strng_2) {
                        var wrnng = 'Not match with "'+name+'".';
                        window.alert(wrnng);
                        G.objct.focus();
                        return false;
                    }
                    return true;
                };
                break;
            case 'dplctn' :
                this.fnctn = function() {
                    var XHR;
                    if(window.XMLHttpRequest) { // Mozilla, Safari, ...
                        XHR = new XMLHttpRequest();
                        if (XHR.overrideMimeType) XHR.overrideMimeType('text/xml');
                    } else if(window.ActiveXObject) { // IE
                        try { XHR = new ActiveXObject("Msxml2.XMLHTTP");
                        } catch(e) {
                            try { XHR = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
                        }
                    }
                    if (!XHR) { alert('Giving up :( Cannot create an XMLHTTP instance'); return false; }
                    XHR.onreadystatechange = function() {
                        try {
                            if (XHR.readyState == 4) {
                                if (XHR.status == 200) {
                                    var txt =  XHR.responseText;
                                    if(txt=='duplicated') {
                                        var wrnng = '"'+G.objct.value+'" already exits.';
                                        window.alert(wrnng);
                                        G.objct.focus();
                                        return false;
                                    }
                                } else alert('There was a problem with the request.');
                            }
                        } catch(e) { alert('Caught Exception: ' + e.description); }
                    };
                    var url = G.optn_1+G.objct.value;
                    XHR.open('GET',url,true);
                    XHR.send(null);
                    return true;
                };
                break;
        }
        Q_vldtn.event_attach(G.objct,G.evnt,G.fnctn);
    }
    ,add : function(idntty,strng) {
        Q_vldtn.wtngs.push(new Array(idntty,strng));
    }
    ,start : function() {
        var ghost;
        var inpts = document.getElementsByTagName('input');
        for(i=0; i<inpts.length; i++) {
            var attrbt = inpts[i].getAttribute('Q_vldtn');
            if(attrbt) {
                var arry = attrbt.split('|');
                for(j=0; j<arry.length; j++) {
                    if(arry[j].length>0) {
                        ghost = new Q_vldtn.create(inpts[i],arry[j]);
                        Q_vldtn.ghosts.push(ghost);
                    }
                }
            }
        }
        for(i=0; i<Q_vldtn.wtngs.length; i++) {
            if(document.getElementById(Q_vldtn.wtngs[i][0])) {
                var objct = document.getElementById(Q_vldtn.wtngs[i][0]);
                var arry = Q_vldtn.wtngs[i][1].split('|');
                for(j=0; j<arry.length; j++) {
                    if(arry[j].length>0) {
                        ghost = new Q_vldtn.create(objct,arry[j]);
                        Q_vldtn.ghosts.push(ghost);
                    }
                }
            }
        }
    }
    ,event_attach : function(objct,type,fnctn) {
        if(objct.addEventListener) { objct.addEventListener(type,fnctn,false); return true; } //Mozilla
        else if(objct.attachEvent) { var rtrn = objct.attachEvent('on'+type,fnctn); return rtrn; } //MSIE
        else objct.onclick = fnctn;
    }
    ,attach : function() {
        Q_vldtn.event_attach(window,'load',Q_vldtn.start);
    }
};
Q_vldtn.attach();

