﻿var Emedia = function()
{
    
};

///
/// Checks if the given value contains the specified flag.
///
Emedia.hasFlag = function(value,flag)
{
    return ((value&flag)==flag)?true:false;
};

Emedia.getDefaultId = function(id)
{
    return id;
};

Emedia.getMembers = function(elem)
{
    var member_info = "";
    for(i in elem)
    {
        member_info += i + " : " + elem[i] + "\n";
    }
    return member_info;
};

Emedia.getElementLeft = function(elemid)
{
    var handle = document.getElementById(elemid);
    var left = handle.offsetLeft;
    var parent_handle = handle;
    while(parent_handle=parent_handle.offsetParent)
    {
        left += parent_handle.offsetLeft;
    }
    return left;
};

Emedia.getElementTop = function(elemid)
{
    var handle = document.getElementById(elemid);
    var top = handle.offsetTop;
    var parent_handle = handle;
    while(parent_handle=parent_handle.offsetParent)
    {
        top += parent_handle.offsetTop;
    }
    return top;
};

Emedia.Web = function()
{
    
}


String.prototype.toProperCase = function()
{
  return this.toLowerCase().replace(/^(.)|\s(.)/g, 
      function($1) { return $1.toUpperCase(); });
}

function clearItems(list)
{
    if(list.options)
    {
        while (list.options.length > 0) {
            list.options[0] = null;
        }
    }
}

Emedia.Web.getCurrentPageName = function()
{
    var sPath = window.location.pathname;
    var sPage = sPath.substring(sPath.lastIndexOf('/') + 1);
    return sPage;
}

Emedia.Web.ErrorPage = function()
{
    
}

Emedia.Web.ErrorPage.show = function(func,msg)
{
    alert("ERROR IN : " + func +
         "\n--------------------------------------------------------------\n"+
        "Message : \n"+msg);
}

Emedia.Web.Validation = function()
{
    
}

Emedia.Web.Validation.validateEntry = function(caseType,charType,minlen,maxlen,entry)
{
    var regex_expression = "^[";
    
    if((charType&CharType.ASCII)==CharType.ASCII)
    {
        if(caseType == CaseType.UPPERCASE)
        {
            regex_expression += "A-Z";
        }
        else if(caseType == CaseType.LOWERCASE)
        {
            regex_expression += "a-z";
        }
        else if(caseType == CaseType.PROPER)
        {
            regex_expression += "A-Za-z";
        }
        else if(caseType == CaseType.NONE)
        {
            //regex_expression += "A-Za-z";
        }   
    }
    if((charType&CharType.NUMBERS)==CharType.NUMBERS)
    {
        regex_expression += "0-9";
    }
    if((charType&CharType.ALLOWWHITESPACE)==CharType.ALLOWWHITESPACE)
    {
        regex_expression += "\\s";
    }
    if((charType&CharType.ALLOWHYPHEN)==CharType.ALLOWHYPHEN)
    {
        regex_expression += "\\c-";
    }
    if((charType&CharType.ALLOWSLASH)==CharType.ALLOWSLASH)
    {
        regex_expression += "\\/";
    }
    regex_expression += "]{"+minlen+","+maxlen+"}$";
    var regexp = new RegExp(regex_expression,"");  
    var result = false;
    result = regexp.test(entry);
    return result;
}

Emedia.Web.Validation.validateCustomeRegex = function(expression,entry)
{
    var result = false;
    var regexp = new RegExp(expression,""); 
    result = regexp.test(entry);
    return result;
}

//enum
var CaseType = function(){}
CaseType.UPPERCASE = 0;
CaseType.LOWERCASE = 1;
CaseType.PROPER = 2;
CaseType.NONE = 3;

var CharType = function(){}
CharType.ASCII = 0x100;
CharType.NUMBERS = 0x200;
CharType.ALLOWWHITESPACE = 0x400;
CharType.ALLOWHYPHEN = 0x800;
CharType.ALLOWSLASH = 0x1000;

Emedia.Web.InputFilter = function()
{
    
}

Emedia.Web.InputFilter.setMask = function(mask,maxlength,elementid)
{
    var input = document.getElementById(elementid)
    if(input!=null)
    {
        input._maxlength = maxlength;
        input._mask = mask;
        var keyUpListener = keyUpFilter;
        var keyDownListener = keyDownFilter;
        //input.removeEventListener('keydown', keyDownListener,false);
        //input.removeEventListener('keyup', keyUpListener,false);
        input.addEventListener("keydown", keyDownListener,true);
        input.addEventListener("keyup",keyUpListener,false);
    }
    else
    {
        Emedia.Web.ErrorPage.show(
            "Emedia.Web.InputFilter.setMask",
            "L'élément " + elementid + " est indéfini.");
    }
}


Emedia.Web.InputFilter.setMask2 = function(mask,maxlength,input)
{
    //var input = document.getElementById(elementid)
    if(input!=null)
    {
        input._maxlength = maxlength;
        input._mask = mask;
        var keyUpListener = keyUpFilter;
        var keyDownListener = keyDownFilter;
        //input.removeEventListener('keydown', keyDownListener,false);
        //input.removeEventListener('keyup', keyUpListener,false);
        input.addEventListener("keydown", keyDownListener,true);
        input.addEventListener("keyup",keyUpListener,false);
    }
    else
    {
        Emedia.Web.ErrorPage.show(
            "Emedia.Web.InputFilter.setMask",
            "L'élément " + elementid + " est indéfini.");
    }
}



var inUpUse = false;

function keyUpFilter(ev)
        {       
            if(inUpUse)return;
            inUpUse = true;
            //if(typeof(ev)=="undefined" && typeof(event)=="undefined")return;
            var _event = ev?ev:event;
            var input = _event["target"]?_event.target:_event.srcElement;
            var mask = input._mask;
            var maxlength = input._maxlength;
            var _key = _event.keyCode;
            
            
            if(Emedia.hasFlag(mask,InputMasks.CONTROLKEYS) && 
                Emedia.Web.InputFilter.isControlKey(_key))
            {
                
            }
            else
            {
                if(Emedia.hasFlag(mask,InputMasks.UPPERCASE))
                {
                    input.value = input.value.toUpperCase();
                }
                if(Emedia.hasFlag(mask,InputMasks.LOWERCASE))
                {
                    input.value = input.value.toLowerCase();
                }
                if(Emedia.hasFlag(mask,InputMasks.PROPERCASE))
                {
                    input.value = input.value.toProperCase();
                }
            }
            if(!using_ie)_event.preventDefault();
            inUpUse = false;
            return true;
        }

var inDownUse = false;
var eventStackIndex = 0;

function keyDownFilter(ev)
        {
            eventStackIndex++;
            if(inDownUse && eventStackIndex>0)return false;
            inDownUse = true;
            if(typeof(ev)=="undefined" && typeof(event)=="undefined")return;
            var _event = ev?ev:event;
            var input = _event["target"]?_event.target:_event.srcElement;
            var mask = input._mask;
            var maxlength = input._maxlength;
            
            if(_event==null)
            {
                Emedia.Web.ErrorPage.show("Emedia.Web.InputFilter.setMask",
                    "à input.onkeydown(), event est null.\n"+
                    "Veuillez utiliser la dernière version d'Internet Explorer, Firefox, Safari ou Chrome.");
            }
            var _return = false;
            var _key = _event.keyCode;
            if(Emedia.hasFlag(mask,InputMasks.ASCII))
            {
                if(Emedia.Web.InputFilter.isASCII(_key))_return = true;
            }
            if(Emedia.hasFlag(mask,InputMasks.NUMBERS))
            {
                if(Emedia.Web.InputFilter.isNumber(_key))_return = true;
            }
            if(Emedia.hasFlag(mask,InputMasks.CONTROLKEYS))
            {
                if(Emedia.Web.InputFilter.isControlKey(_key))_return = true;
            }
            if(input.value.length == maxlength)
            {
                _return = false;
                if(Emedia.hasFlag(mask,InputMasks.CONTROLKEYS))
                {
                    if(Emedia.Web.InputFilter.isControlKey(_key))_return = true;
                }
            }
            if(Emedia.hasFlag(mask,InputMasks.DISABLESPACE))
            {
                if(_key==32)_return = false;
            }
            if(Emedia.hasFlag(mask,InputMasks.TRANSLATENUM) && 
                input.value.length < maxlength)
            {
                if(Emedia.Web.InputFilter.isNotNumpadNumber(_key))
                {
                    input.value += "0123456789".charAt(_key-48);
                    _return = false;
                }
            }
            if(Emedia.hasFlag(mask,InputMasks.ALLOWAROBASE))
            {
                if(_key==48){
                    input.value += '@';
                    _return = false;
                }
            }
            if(Emedia.hasFlag(mask,InputMasks.ALLOWDOT))
            {
                if(_key==110 || _key==190){
                    input.value += '.';
                    _return = false;
                }
            }
            if(Emedia.hasFlag(mask,InputMasks.ALLOWHYPHEN))
            {
                if(_key==54){
                    input.value += '-';
                    _return = false;
                }
            }
            
            if(Emedia.hasFlag(mask,InputMasks.ALLOWUNDERSCORE))
            {
                if(_key==56){
                    input.value += '_';
                    _return = false;
                }
            }
            
             if(Emedia.hasFlag(mask,InputMasks.ALLOWDIVIDE))
            {
                if(_key==111){
                    input.value += '/';
                    _return = false;
                }
            }
            
            if(!_return && !using_ie)_event.preventDefault();
            inDownUse = false;
            //eventStackIndex = 0;
            return _return;
        }

Emedia.Web.InputFilter.isControlKey = function(key)
{
    if(key== 8)return true; //backspace
    if(key== 9)return true; //tab
    if(key==13)return true; //enter
    if(key==16)return true; //shift
    if(key==17)return true; //ctrl
    if(key==18)return true; //alt
    if(key==20)return true; //maj
    if(key==32)return true; //space
    if(key==33)return true; //page up
    if(key==34)return true; //page down
    if(key==35)return true; //end
    if(key==36)return true; //home      
    if(key==37)return true; //left
    if(key==38)return true; //up
    if(key==39)return true; //right
    if(key==40)return true; //down
    if(key==45)return true; //inser
    if(key==46)return true; //delete
    return false;
}

Emedia.Web.InputFilter.isASCII = function(key)
{    
    if(key<65 || key>90)return false;
    else return true;
}

Emedia.Web.InputFilter.isNumber = function(key)
{
    if(key>=96 && key<=105)return true;
    else return false;
}

Emedia.Web.InputFilter.isNotNumpadNumber = function(key)
{
    if(key>=48 && key<=57)return true;
    else return false;
}

//enum
var InputMasks = function(){}
InputMasks.ASCII              = 0x0001;
InputMasks.NUMBERS            = 0x0002;
InputMasks.CONTROLKEYS        = 0x0004;
InputMasks.DISABLESPACE       = 0x0008;
InputMasks.TRANSLATENUM       = 0x0010;
InputMasks.UPPERCASE          = 0x0020;
InputMasks.LOWERCASE          = 0x0040;
InputMasks.PROPERCASE         = 0x0080;
InputMasks.ALLOWAROBASE       = 0x0100;
InputMasks.ALLOWDOT           = 0x0200;
InputMasks.ALLOWHYPHEN        = 0x0400;
InputMasks.ALLOWUNDERSCORE    = 0x0300;
InputMasks.ALLOWDIVIDE        = 0x0500;


Emedia.Web.XmlHttp = function()
{

}

Emedia.Web.XmlHttp.sendRequest = function(url,responseCallback)
{
    var xhr = using_ie?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();
    url = encodeURI(url);
    xhr.open("GET",url+"&rand="+Math.random(),true);
    xhr.onreadystatechange = function()
    {
        if(xhr.readyState==4)
        {
            if(xhr.status==200)
            {
                responseCallback(xhr.responseText);
            }
        }
    }
    xhr.send(null);
}

Emedia.getString = function(name,callback)
{
    Emedia.Web.XmlHttp.sendRequest(
        Emedia.buildQueryUri("geterror",new Array(name)),callback);
}

Emedia.getInterCodes = function(callback)
{
    Emedia.Web.XmlHttp.sendRequest(
        Emedia.buildQueryUri("getintercodes",new Array()),callback);
}

Emedia.getDefaultCountry = function(callback)
{
    Emedia.Web.XmlHttp.sendRequest(
        Emedia.buildQueryUri("getdefaultcountry",new Array()),callback);
}

Emedia.getZipLength = function(countryid,callback)
{
    Emedia.Web.XmlHttp.sendRequest(
        Emedia.buildQueryUri("getziplength",new Array(countryid)),callback);
}

Emedia.getGsmLength = function(countryid,callback)
{
    Emedia.Web.XmlHttp.sendRequest(
        Emedia.buildQueryUri("getgsmlength",new Array(countryid)),callback);
}

Emedia.validateCaptcha = function(text,callback)
{
    Emedia.Web.XmlHttp.sendRequest(
        Emedia.buildQueryUri("validatecaptcha",new Array(text)),callback);
}

Emedia.getGsmPrefix = function(countryid,callback)
{
    Emedia.Web.XmlHttp.sendRequest(
        Emedia.buildQueryUri("getgsmprefix",new Array(countryid)),callback);
}

Emedia.keepSessionAlive = function(id,callback)
{
    Emedia.Web.XmlHttp.sendRequest(
        Emedia.buildQueryUri("keepsessionalive",new Array(id.toString())),callback);
}

Emedia.destroyApp = function(callback)
{
    Emedia.Web.XmlHttp.sendRequest(
        Emedia.buildQueryUri("destroyapp",new Array()),callback);
}

Emedia.uploadSignature = function(signdata,callback)
{
    Emedia.Web.XmlHttp.sendRequest(
        Emedia.buildQueryUri("uploadsignature",new Array(signdata)),callback);
}

Emedia.buildQueryUri = function(funcname,argarray)
{
    var uri = "FuncXML.aspx?function=" + funcname;
    uri = encodeURI(uri);
    for(i=0;i<argarray.length;i++){uri += "&p"+i+"="+argarray[i];}
    return uri;
}

var CustomMasks = function(){}
CustomMasks.DEFAULTNUMBERS = InputMasks.NUMBERS | InputMasks.CONTROLKEYS | InputMasks.TRANSLATENUM | InputMasks.DISABLESPACE;
CustomMasks.LOWERASCII = InputMasks.ASCII | InputMasks.CONTROLKEYS |  InputMasks.LOWERCASE;
CustomMasks.PROPERASCII = InputMasks.ASCII | InputMasks.CONTROLKEYS |  InputMasks.PROPERCASE;
CustomMasks.UPPERASCII = InputMasks.ASCII | InputMasks.CONTROLKEYS |  InputMasks.UPPERCASE;
CustomMasks.UPPERANDNUM = InputMasks.ASCII | InputMasks.NUMBERS |InputMasks.TRANSLATENUM|InputMasks.CONTROLKEYS |  InputMasks.UPPERCASE;


CustomMasks.ASCIIANDNUM = InputMasks.ASCII | InputMasks.NUMBERS |InputMasks.TRANSLATENUM|InputMasks.CONTROLKEYS;
CustomMasks.REMARQUEMASK =InputMasks.ASCII|InputMasks.NUMBERS|InputMasks.CONTROLKEYS|InputMasks.ALLOWUNDERSCORE|InputMasks.ALLOWHYPHEN|InputMasks.ALLOWDOT|InputMasks.ALLOWDIVIDE;
// |InputMasks.ALLOWDOT|InputMasks.ALLOWHYPHEN|InputMasks.ALLOWAROBASE|InputMasks.ALLOWUNDERSCORE