
jQuery.Web = {
    get:function(url, data) {
		if(data && typeof(data) != 'string'){
			data = jQuery.param(data);
		}		
		if(data) {
			url += (url.match(/\?/) ? "&" : "?") + data +'&token='+ jQuery.Web.token();
            data = null;
		}else{
		    url += (url.match(/\?/) ? "&" : "?") +'token='+ jQuery.Web.token();
		}

        if (window.XMLHttpRequest) {
            xmlHttp = new XMLHttpRequest();
        }
        else if (window.ActiveXObject) {
            try {
                xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e) {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
        }

        if (!xmlHttp) {
            alert('ÄúµÄä¯ÀÀÆ÷²»Ö§³ÖXMLHttpRequest');
        }
       
        xmlHttp.open("GET", url, false);
        xmlHttp.send(null);
        return xmlHttp.responseText;
	},
    token:function(){
	    var hex = new Array('0','1','2','3','4','5','6','7','8', '9','a','b','c','d','e','f');
	    var t = '';
	    for (var i = 0; i<32; i++){
		    t += hex[Math.floor(Math.random() * 16)];
	    }
	    return t.toUpperCase();
    },
    getXml:function(url, data){
        var doc = null;
        var text = jQuery.Web.get(url, data);
        if (document.implementation.createDocument){
            var parser = new DOMParser();
            doc = parser.parseFromString(text, 'text/xml');
        }else if(window.ActiveXObject) {
            var doc = new ActiveXObject('Microsoft.XMLDOM');
            doc.async = 'false';
            doc.loadXML(text);
        }
        return doc;
    }
};



//submit the current form
var isSubmitForm = false;
function SubmitForm(o){
    var form = GetCurrentForm(o);
    if(form != null){
        if(SubmitFormCtrl(form) != false && isSubmitForm == false){
            isSubmitForm = true;
            form.submit();
        }
    }
}


/* get language resources */
function GetResource(id){
    return $($.Web.getXml('api.asmx/GetResource', {id:id})).find('string').text();
}


function GetCurrentForm(o){
    if(!o){
        return document.getElementById('aspnetForm');
    }
    var tag = o;
    var name = '';
    var i = 0;
    while(true){
        name = tag.tagName.toLowerCase();
        if(name == 'form'){
            return tag;
        }
        tag = tag.parentNode;

        i++;
        if(i > 20){
            break;
        }
    }
    return null;
}

//submit form's control
function SubmitFormCtrl(o){
    alert('The \'SubmitFormCtrl\' method or operation is not implemented.');
    return false;
}

/* check form control */
function CheckFormSubmit(o, p){
    this.ChkVal = chkVal;
    this.ChkReg = chkReg;
    this.ChkIsExist = chkIsExist;
    this.IsCheck = isCheck;
    this.IsNumber = isNumber;
    this.IsDate = isDate;
    this.IsEmail = isEmail;
    this.IsIP = isIP;
    this.GetValue = GetValue;
    this.SetValue = SetValue;
    this.GetObject = GetObject;
    this.Focus = Focus;
    this.ChkEqual = chkEqual;
    this.ChkLength = chkLength;
    this.ChkCompareDate = chkCompareDate;
    
    if(!p){
        p = '';
    }
    
    /*
    e: element
    v: compare value
    m: message
    */
    function chkVal(e, v, m){
        var val = GetValue(e);
        if(val == v){
            //SendMessage(e, m);
            return true;
        }
        return false;
    }
   
    /*
    e: element
    r: regex
    m: message
    */
    function chkReg(e, r, m){
        var val = GetValue(e);
        var reg ;
        if(typeof(r) == 'object'){
            reg = new RegExp(r)
        }else{
            reg = new RegExp(r, 'gi')
        }
        if(!reg.test(val)){
            //SendMessage(e, m);
            return true;
        }
        return false;
    }
    
    /*
    e1:element
    e2:element
    m:message
    */
    function chkEqual(e1, e2, m){
        var val1 = GetValue(e1);
        var val2 = GetValue(e2);
        if(val1 != val2){
            //SendMessage(e2, m);
            return false;
        }
        return true;
    }
    
    /*
    e:element
    m:message
    min:min length
    max:max length
    */
    function chkLength(e, m, min, max){
        var val = GetValue(e);
        if(val.length < min){
            //SendMessage(e, m)
            return false;
        }
        if(max){
            if(val.length > max){
                //SendMessage(e, m)
                return false;
            }
        }        
        return true;
    }
    
    /*
    e: element
    a: web service api method
    d: data {a:1,b:2}
    m: message
    */
    function chkIsExist(e, a, d, m){
        var val = GetValue(e);
        if(typeof(d) != 'object'){
            d = {id:d,name:val};
        }
        var text = $($.Web.getXml('/api.asmx/'+ a, d)).find('boolean').text();
        if(text.toLowerCase() == 'true'){
            //SendMessage(e, m);
            return true; 
        }
        return false;
    }
    
    /*
    e: element
    m: message
    */
    function isCheck(e, m){
        var elems = o[p+e];
        if(elems.length){
            for(var i=0; i<elems.length; i++){
                if(elems[i].checked == true && elems[i].disabled == false){
                    return true;
                }
            }
        }else{
            if(elems.checked){
                return true;
            }
        }
        //SendMessage(e, m);
        return false;
    }
    
    /*
    e: element
    m: message
    na£ºnot allow negative
    */
    function isNumber(e, m, na){
        var val = GetValue(e);
        if(val.length == 0){
            //SendMessage(e, m);
            return false;
        }
        var l = "1234567890";
        if (!na){
            l = l + "_";
        }
        for(var i=0; i<val.length; i++){
            var c = val.charAt(i);
            if(l.indexOf(c) == -1){
                //SendMessage(e, m);
                return false;
            }
        }
        return true;
    }
    
    /*  
    e: element
    m: message
    */
    function isDate(e, m)
    {
        var val = GetValue(e);
        var regValid = new RegExp(/^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))$/);
        if (regValid.test(val)){
            //Date >= '1753-01-01' in SQL; zhaoyong
            if(chkCompareDate('1753-01-01',val,m)){
            return false;
            }else{
                return true;
            }
        }else{
            //SendMessage(e, m);
            return false;
        }
    }
    
  /*  function isTime(e, m)
    {
        var val = GetValue(e);
        var regValid = new RegExp(/^(\s(((0?[0-9])|([1][0-9])|([2][0-4]))\:([0-5]?[0-9])((\s)|(\:([0-5]?[0-9])))))?$/);
        if (regValid.test(val)){
            return true;
        }else{
            SendMessage(e, m);
            return false;
        }
    }*/
    
    /*
    e: element
    m: message
    a: allow null
    */
    function isEmail(e, m, a){
        var val = GetValue(e);
        if(val.length == 0 && a == true){
            return true;
        }
        
        if(val.length == 0){
            //SendMessage(e, m);
            return false;
        }
        
        var regInvalid = new RegExp(/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/);
        var regValid = new RegExp(/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/);
        if (!regInvalid.test(val) && regValid.test(val)){
            return true;
        }else{
            //SendMessage(e, m);
            return false;
        }
    }
    
    /*
    e: element
    m: message
    */
    function isIP(e, m){
        var strIP = GetValue(e);
        var exp=/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/; 
        var reg = strIP.match(exp); 
        if(reg != null) 
        { 
             return true;
        } 
        else{
            //SendMessage(e, m);
            return false;  
        }   
    }
    
    /*
    s: startDate
    e: endDate
    m: message
    */
    function chkCompareDate(s, e, m)
    {
        var sd = s.split("-"); 
        var starttime = new Date(sd[0],sd[1],sd[2]); 
        var starttimes = starttime.getTime();

        var ed = e.split("-"); 
        var endtime = new Date(ed[0],ed[1],ed[2]); 
        var endtimes = endtime.getTime();

        if(starttimes > endtimes) 
        {
            //SendMessage(s, m);
            return true;
        }
        return false;
    }
    
    function GetValue(e){
        return $.trim(o[p+e].value);
    }
    
    function SetValue(e, v){
        o[p+e].value = v;
    }
    
    function GetObject(e){
        return o[p+e];
    }
    
    function SendMessage(e, m){
        if(typeof(m) == 'number'){
            alert(GetResource(m));
        }else{
            alert(m);
        }
        try{
            Focus(e);
        }catch(e){
            //alert(e);
        }
    }
    
    function Focus(e){
        o[p+e].focus();
        o[p+e].select();
    }
}

function GetValueFromUrl(key){
    var url = String(window.document.location);   
    var rval = "";   
    var strQus = "?";   
    var strAmp = "&";   
    var strEq = "=";   
    var iPos;   

    iPos = url.indexOf(strQus);   

    var strQuery = url.substr(iPos, url.length - iPos);   
    var strLCQuery = strQuery.toLowerCase();   
    var LCKey = key.toLowerCase();   

    iPos = strLCQuery.indexOf(strQus + LCKey + strEq);   
    if(iPos == -1){   
        iPos = strLCQuery.indexOf(strAmp + LCKey + strEq);   
        if(iPos == -1){  
            return rval;
        }
    }   

    rval = strQuery.substr(iPos + key.length + 2,strQuery.length-(iPos + key.length + 2));   
    var iPosAMP = rval.indexOf(strAmp);   

    if(iPosAMP == -1){
        return rval;
    }else{   
        rval = rval.substr(0, iPosAMP);   
    }   

    return rval;   
}

function ReplaceParam(url,param,val){
    if(url.indexOf('?') > -1){
//        if(param == "dForm"){
//                var index = url.indexOf('?');
//                url = url.substring(0,index);
//        }else{
            var ud = "&" + param + "=" + val;
            url += ud + val;
        //}

        if(new RegExp(param+"=.*&").test(url)){
            url = url.replace(new RegExp(param+"=.*?&","g"),param+"="+val+"&");   
        } else if(new RegExp(param+"=.*$").test(url)){
            url = url.replace(new RegExp(param+"=.*$","g"),param+"="+val); 
        }
    }else{
        url += "?" + param + "=" + val;
    }
    window.location.href = url;
}


function StateSelected(cid, id, ple){
    var selector = $('#'+ id);
    selector.children(':gt(0)').remove();
    var val = $($.Web.getXml('api.asmx/GetStateList', {countryId:cid,please:ple})).find('string').text();
    if(val.length > 0){
        var option = null;
        var array = val.split('|');  
        $(array).each(function(i, n){
            option = n.split(',');
            selector.append('<option value='+ option[0] +'>'+ option[1] +'</option>');
        });
    }
}

function parseDate(str){          
  if(typeof str == 'string'){          
    var results = str.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}) *$/);          
    if(results && results.length>3)          
      return new Date(parseInt(results[1]),parseInt(results[2]) -1,parseInt(results[3]));           
    results = str.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}) +(\d{1,2}):(\d{1,2}):(\d{1,2}) *$/);          
    if(results && results.length>6)          
     return new Date(parseInt(results[1]),parseInt(results[2]) -1,parseInt(results[3]),parseInt(results[4]),parseInt(results[5]),parseInt(results[6]));           
    results = str.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}) +(\d{1,2}):(\d{1,2}):(\d{1,2})\.(\d{1,9}) *$/);          
    if(results && results.length>7)          
      return new Date(parseInt(results[1]),parseInt(results[2]) -1,parseInt(results[3]),parseInt(results[4]),parseInt(results[5]),parseInt(results[6]),parseInt(results[7]));           
  }          
  return null;          
}

function IsNum(val){
       if(val.length == 0){
            return false;
        }
        var l = "1234567890";
        for(var i=0; i<val.length; i++){
            var c = val.charAt(i);
            if(l.indexOf(c) == -1){
                return false;
            }
        }
        return true;
}

function IsEmil(val){
        
        if(val.length == 0){
            //SendMessage(e, m);
            return false;
        }
        
        var regInvalid = new RegExp(/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/);
        var regValid = new RegExp(/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/);
        if (!regInvalid.test(val) && regValid.test(val)){
            return true;
        }else{
            return false;
        }
}
