﻿/// <reference path="json.js" >

var Base={};
Base.Methods={};
Base.EventHandlers={};
Base.Constructors={};

Base.Methods.formatCurrency=function(num){

    num = isNaN(num) || num === '' || num === null ? 0.00 : num;  

    return parseFloat(num).toFixed(2);  

}

Base.Constructors.NameValue=function(name,value){
    this.name=name;
    this.value=value;
}

Base.Constructors.DdlProperty=function(firstBlankOrNot,firstBlankText){
    this.FirstBlankOrNot=firstBlankOrNot;
    this.FirstBlankText=firstBlankText;
};

Base.Methods.blockNonNumbers = function(obj, event, allowDecimal, allowNegative)
{
	var e = event || window.event;
	var key;
	var isCtrl = false;
	var keychar;
	var reg;
		
	if(window.event) {
		key = e.keyCode;
		isCtrl = window.event.ctrlKey
	}
	else if(e.which) {
		key = e.which;
		isCtrl = e.ctrlKey;
	}
	
	if (isNaN(key)) return true;
	
	keychar = String.fromCharCode(key);
	
	// check for backspace or delete, or if Ctrl was pressed
	if (key == 8 || isCtrl)
	{
		return true;
	}

	reg = /\d/;
	var isFirstN = allowNegative ? keychar == '-' && obj.value.indexOf('-') == -1 : false;
	var isFirstD = allowDecimal ? keychar == '.' && obj.value.indexOf('.') == -1 : false;
	
	return isFirstN || isFirstD || reg.test(keychar);
}


Base.Methods.addOptions=function(ctr,nameValues,firstBlank,UseNameOnly){

    if (!ctr.options) return;
    ctr.options.length=0;
    if (firstBlank){
//        if (firstBlankText){
//            ctr.options.add(new Option(firstBlankText,""));
//        }
//        else{
//            ctr.options.add(new Option("",""));
//        }
        ctr.options.add(new Option("",""));
    }
    for (var i=0;i<nameValues.length;i++){
        if (UseNameOnly)
                ctr.options.add(new Option(nameValues[i].Name,nameValues[i].Name));
            else
                ctr.options.add(new Option(nameValues[i].Name,nameValues[i].Value));
    }
}

Base.Methods.sortSelectOptions=function(ctr){
    if (!ctr.options || ctr.options.length<2) return;
    var nameValues=[];
    for (var i=0;i<ctr.options.length;i++){
        nameValues.push(new Base.Constructors.NameValue(ctr.options[i].text,ctr.options[i].value));
    }
    nameValues.sort(function(a,b){
        if(a.name>b.name){
            return 1;
        }
        else if(a.name<b.name){
            return -1;
        }
        else{
            return 0;
        }
    });
    for (var j=0;j<nameValues.length;j++){
        ctr.options[j].text=nameValues[j].name;
        ctr.options[j].value=nameValues[j].value;
    }
    ctr.style.diplay="none";
    ctr.style.display="";
}

Base.Methods.initElements=function(elements){
    for(key in elements){
        elements[key]=document.getElementById(key);
    }
}

Base.Methods.removeChildren=function(node){
    while(node.lastChild){
        node.removeChild(node.lastChild);
    }
}

Base.Methods.arrayContains = function(arr,obj) {
  var i = arr.length;
  while (i>0 && i--) {
    if (arr[i] == obj) {
      return true;
    }
  }
  return false;
}


Base.Methods.parameter=function(parameter){
    if (parameter)
    this.parm=parameter;
}
Base.Methods.getData2=function(parm,method,successHandler,errorHandler){ 
    parm=new Base.Methods.parameter(parm);
    parm=JSON.stringify(parm);
    $.ajax({
      type: "POST",
      url: method,
      data: parm,
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      success: successHandler,
      error: function(xhr, status, error) 
          { 
            if(xhr.status == 401)
            {
                var str = top.window.location.href;
                str = str.substring(0, str.lastIndexOf("/"));
                top.window.location.href = str + "/login.aspx";
            }           
            else if (xhr.statusText == "Session Ended"){
               top.window.location.href = xhr.responseText;
            }           
            else {errorHandler(xhr) } 
          }
    });
}

Base.Methods.getData=function(parm,method,successHandler,errorHandler,obj1,obj2,UseNameOnly){ 
    parm=new Base.Methods.parameter(parm);
    parm=JSON.stringify(parm);
    var callback=function(result,status,request){
        successHandler(result,status,request,obj1,obj2,UseNameOnly);
    }
    $.ajax({
      type: "POST",
      url: method,
      data: parm,
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      success: callback,
      error: function(xhr, status, error) 
          { 
            if(xhr.status == 401)
            {
                var str = top.window.location.href;
                str = str.substring(0, str.lastIndexOf("/"));
                top.window.location.href = str + "/login.aspx";
            }          
            else if (xhr.statusText == "Session Ended"){
               top.window.location.href = xhr.responseText;
            }
             else {errorHandler(xhr) } 
          }
    });
}



Base.Methods.uploadDataSync=function(parm,method,successHandler,errorHandler,obj){ 
    parm=new Base.Methods.parameter(parm);
    parm=JSON.stringify(parm);
    var callback=function(result,status,request){
        if (successHandler) successHandler(result,status,request,obj);
    }
    $.ajax({
      type: "POST",
      url: method,
      data: parm,
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      success: callback,
      error: function(xhr, status, error) 
          { 
            if(xhr.status == 401)
            {
                var str = top.window.location.href;
                str = str.substring(0, str.lastIndexOf("/"));
                top.window.location.href = str + "/login.aspx";
            }           
            else if (xhr.statusText == "Session Ended"){
               top.window.location.href = xhr.responseText;
            } 
            else {errorHandler(xhr) } 
          },
      async:false
    });
}

Base.Methods.getServiceData=function(parm,method,successHandler,errorHandler){ 
    parm=JSON.stringify(parm);
    $.ajax( { 
        url: method,
        data: parm,
        type: "POST",
        processData: false,
        contentType: "application/json; charset=utf-8",
        dataType: "json",  
        success: function(result){
            if (!result) successHandler(null);
            for(var prop in result){
                successHandler(result[prop]);
                break;
            }
        },
      error: function(xhr, status, error) 
          { 
            if(xhr.status == 401)
            {
                var str = top.window.location.href;
                str = str.substring(0, str.lastIndexOf("/"));
                top.window.location.href = str + "/login.aspx";
            }           
            else if (xhr.statusText == "Session Ended"){
               top.window.location.href = xhr.responseText;
            }            
            else {errorHandler(xhr) } 
          }
        });
}

Base.Methods.getServiceDataXml=function(parm,method,successHandler,errorHandler){ 
    parm=JSON.stringify(parm);
    $.ajax( { 
        url: method,
        data: parm,
        type: "POST",
        processData: false,
        contentType: "application/json; charset=utf-8",
        dataType: "xml",  
        success: function(result){
            if (!result) successHandler(null);
            successHandler(result.xml);
        },
      error: function(xhr, status, error) 
          { 
            if(xhr.status == 401)
            {
                var str = top.window.location.href;
                str = str.substring(0, str.lastIndexOf("/"));
                top.window.location.href = str + "/login.aspx";
            }           
            else if (xhr.statusText == "Session Ended"){
               top.window.location.href = xhr.responseText;
            }            
            else {errorHandler(xhr) } 
          }
        });
}
    
    
Base.Methods.trim = function trim(str) {
    if (!str) return "";
    return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

Base.Methods.ddlSelectedOptions= function(ddl) {
    if (ddl.selectedIndex==-1) return null;
    var indexes=[];
    for (var i=0;i<ddl.options.length;i++){
        if (ddl.options[i].selected){
            indexes.push(i);
        }
    }
    return indexes;
}

Base.Methods.ddlSelectedText = function(ddl) {
    if (ddl.selectedIndex >= 0)
        return ddl.options[ddl.selectedIndex].text;
    return "";
}

Base.Methods.ddlSelectedValue = function(ddl) {
    if (ddl.selectedIndex >= 0)
        return ddl.options[ddl.selectedIndex].value;
    return -1;
}

Base.Methods.ddlSelect = function(ddl, text) {
    //ddl.options[ddl.selectedIndex].selected = false;
    for (var i = 0; i < ddl.options.length; i++) {
        if (ddl.options[i].text == text) {
            ddl.selectedIndex=i;
            return;
        }
    }
    ddl.selectedIndex = -1;
}

Base.Methods.ddlSelectValue = function(ddl, value) {
    for (var i = 0; i < ddl.options.length; i++) {
        if (ddl.options[i].value == value) {
            ddl.selectedIndex=i;
            return;
        }
    }
    ddl.selectedIndex = -1;
}

Base.Methods.ddlAddOptions=function(ddl,nameValues,ddlProperty){
    if (!ddl.options) return;
    ddl.options.length=0;
    if (ddlProperty && ddlProperty.FirstBlankOrNot){
        if (ddlProperty.FirstBlankText){
            ddl.options.add(new Option(ddlProperty.FirstBlankText,""));
        }
        else{
            ddl.options.add(new Option("",""));
        }
    }
    for (var i=0;i<nameValues.length;i++){
        if (nameValues[i].IsDefault){
            ddl.options.add(new Option(nameValues[i].Name,nameValues[i].Value),true);
        }
        else{
            ddl.options.add(new Option(nameValues[i].Name,nameValues[i].Value));
        }
    }
};

Base.Methods.numAndChar_feild_onKeyPress = function(event) {
    var e = event || window.event;
    var code = e.charCode || e.keyCode;
    var ch = String.fromCharCode(code);
    var pattern = /[0-9a-zA-Z]/
    if (pattern.test(ch)) {
        return true;
    }
    
    if (e.preventDefault) e.preventDefault();
    e.returnValue = false;
    return false;
}

Base.Methods.digit_feild_onKeyPress = function(event) {
    if (window.event) 
    {
        keycode = window.event.keyCode;
    }
    else if (event) 
    {
        keycode = event.which;              
    }
    else return true;
    //alert(keycode);
    if(event)
    {             
      if(keycode == 0)
      {
         return true;
      }
    }
    if((keycode >= 48 && keycode <= 57) || keycode == 8 || keycode == 9)
        return true; 
     else
        return false;
//    var e = event || window.event;
//    var code = e.charCode || e.keyCode;
//    if (code==8 || code==35 || code==36 || code==37 || code==39){
//     return true; //code==46 ||
//    }
//    var ch = String.fromCharCode(code);
//    var pattern = /[0-9]/
//    if (pattern.test(ch)) {
//        return true;
//    }
//    if (e.preventDefault) e.preventDefault();
//    if (e.stopPropagation) e.stopPropagation();
//    e.returnValue = false;
//    return false;
}
Base.Methods.number_feild_onKeyPress = function(event) {
    var e = event || window.event;
    var code = e.charCode || e.keyCode;
    if (code==8 ||  code==35 || code==36 || code==37 || code==39) return true;//code==46 ||
    var ch = String.fromCharCode(code);
    var pattern = /[.0-9]/
    if (pattern.test(ch)) {
        return true;
    }
    
    if (e.preventDefault) e.preventDefault();
    e.returnValue = false;
    return false;
}

Base.Methods.patron_barcode_validate=function(v){
    if (!v || v.charAt(0)!=2 || v.length!=14) return false;
    var sum=0;
    var d;
    for (var i=1;i<=v.length;i++){
        if (i%2==0){
            sum+=v.charAt(i-1);
        }
        else{
            d=v.charAt(i-1)*2;
            if (d>=10){
                sum+=d-9;
            }
            else{
                sum+=d;
            }
        }
    }
    d=sum%10;
    if (d!=10) d=10-d;
    return d==v.charAt(13);   
}

Base.EventHandlers.ddlDataBind=function(result,status,request,ddl,firstBlankOrNot,UseNameOnly){
    var list=result.d;
    if (list){
        Base.Methods.addOptions(ddl,list,firstBlankOrNot,UseNameOnly);
    }
}

Base.EventHandlers.ddlDataBind2=function(result,status,request,ddl,ddlProperty){
    var list=result.d;
    if (list){
        Base.Methods.ddlAddOptions(ddl,list,ddlProperty);
    }
}

Base.EventHandlers.errorHandler=function(msg){
    alert(msg.responseText);
}

