Array.prototype.contains = function(q) {
    var count = 0;
    for (var i = 0; i < this.length; i++) {
        if (this[i] == q) {
            return i;
        } else {
            count++;
        }
    }
    if(count == this.length) { 
        return "false";
    }
}
Math.Random = function(minNum, maxNum) {
    var rand = Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum;
    while (rand == Math.LastRandom) {
        rand = Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum;
    }
    return rand;
}
Math.LastRandom = null;
function systemfunctions() {}
systemfunctions.parseJSON = function(str) {
    return JSON.parse(str);
}
systemfunctions.parseTimestamp = function(ts) {
    var d = new Date(ts *1000);
    return d.getFullYear()+"/"+(d.getMonth()+1)+"/"+(d.getDate())+" "+d.getHours()+":"+(d.getMinutes())+":"+d.getSeconds();
}
systemfunctions.createHTTPResquest =function() {
    try{
        return new ActiveXObject("Microsoft.XMLHTTP");
    }catch(e){
        try{
            return new XMLHttpRequest();
        }catch(e){
            return null;
        }
    }
    return null;

}
//A AJAX call static factory this version carries object throught trans
window.xmladapter = new Array();
systemfunctions.xmlconn = function(method,filename,delegate,data,loadanmi,name,global,obj) {
    var xmladapter = new Object();
    xmladapter.index = window.xmladapter.length;
    window.xmladapter.push(xmladapter);
    xmladapter.request = systemfunctions.createHTTPResquest();
    xmladapter.delegateMethods = delegate;
    xmladapter.loadanmi = loadanmi;
    xmladapter.name = name;
    xmladapter.obj = obj;
    xmladapter.global = global == null ? true : global;
    if(xmladapter.request) {
        xmladapter.request.onreadystatechange = function() { 
            systemfunctions.xmlbehavior(xmladapter);
        };
        var d="";
        var k=0;
        var m="";
        if(data != null) {
            for(var key in data) {
                if(method == "GET") {
                    m = k == 0 ? "?" : "&";
                } else {
                    m = k==0 ? "" : "&";
                }
                d+=m+key+"="+encodeURIComponent(data[key]);
                k++;
            }
        }
        if(method == "POST") {
            xmladapter.request.open(method,filename,true);
            xmladapter.request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xmladapter.request.setRequestHeader("Content-length", d.length);
            xmladapter.request.setRequestHeader("Connection", "close");
        } else {
            if(k!=0) {
                filename += d;
            }
            xmladapter.request.open(method,filename,true);
        }
        if(loadanmi) {
            var notify = new JSNotification("「"+name+"」執行中...",0);
            notify.show();
        }
        if(method == "POST") {
            xmladapter.request.send(d);
        } else {
            xmladapter.request.send(null);
        }
    }
}
systemfunctions.xmlbehavior = function(x) {
    if (x.request.readyState == 4 && x.request.status == 200) {
        for(var i=0;i<x.delegateMethods.length;i++) {
            x.delegateMethods[i](x.request,x.obj);
        }
        var y = systemfunctions.xmlbehavior.globalcall;
        y.reverse();
        if(x.global) {
            for(var i=0;i<y.length;i++) {
                y[i]();
            }
        }
        if(x.loadanmi) {
            window.JSNotify.hide();
        }
    }
}
systemfunctions.xmlbehavior.globalcall = new Array();