if(typeof(Epoint_IE) != "boolean")
	var Epoint_IE = (document.all) ? true : false;
	
if(typeof(Epoint_Button) != "object")
	var Epoint_Button=[];

var aButton = new Array();
var butCount = 0;
function Epoint_getSrcElement(evnt)
{
	if(Epoint_IE)
		return evnt.srcElement;
	else
		return evnt.target;
}

function Epoint_getElementById(id)
{
    
	var el;
	if(Epoint_IE)
		el = document.all[id];
	else 
		el = document.getElementById(id);
	return el;
}


function Init_Button(id,type,msg,url,opentype,features,FunArguments,FunAfterDialogClose)
{
    var elem = Epoint_getElementById(id);
    if(typeof(elem)!="object") return;
    var button;
    switch(type.toLowerCase())
    {
        case "add":
            button = new AddButton(id,type,elem,url,opentype,features,FunArguments,FunAfterDialogClose);
            break;
        case "delete":
            button = new DeleteButton(id,type,msg,elem);
            break;
        case "close":
            button = new CloseButton(id,type,elem);
            break;
        default:
            button = new Button(id,type,elem);
            EpointaddEventListener(elem,"click",NormalButtonClick);
            break;
    }
    Epoint_Button[id] = button;    
}      

function Button(id,type,elem)
{    
    this.Id = id;
    this.Type = type;
    this.Element = elem;
    this.HasClick = false; 
    aButton[butCount++] = id;    
}

function CloseButton(id,type,elem)
{
    var me = new Button(id,type,elem);
    EpointaddEventListener(elem,"click",CloseMe);
    return me;
}

function AddButton(id,type,elem,url,opentype,features,FunArguments,FunAfterDialogClose)
{
    var me = new Button(id,type,elem);
    me.Url = url;
    me.OpenType = opentype;
    me.Features = features;
    me.FunAfterDialogClose = FunAfterDialogClose;
    if(FunArguments !=null && FunArguments!="")
        me.FunArguments = eval(FunArguments + "()");
    else
        me.FunArguments= "";
    EpointaddEventListener(elem,"click",OpenUrl);
    return me;
}



function DeleteButton(id,type,msg,elem)
{
    var me = new Button(id,type,elem);
    me.RaiseMsg = msg;
    me.Confirm = ConfirmInfo;
    EpointaddEventListener(elem,"click",ButtonClick);
    return me;
}

function OpenUrl(evt)
{
    if(evt == null) evt = window.event;
	if(evt != null)
	{
	    var elem = Epoint_getSrcElement(evt);
		var but = Epoint_Button[elem.id];

	    var script =" window.";
		if(but.OpenType != "")
		{
		    var arg = but.FunArguments;
		    script += but.OpenType;
		    script += "('" + but.Url + "',";
		    script += "arg";
		    script += ",'" + but.Features + "')";
		    eval(script);
		}
		
		if(but.OpenType != "showModalDialog")
		{
		    if(but.FunAfterDialogClose != "")
		        eval(but.FunAfterDialogClose);
		}
	}    
}

function CloseMe()
{
    if(aButton != null && aButton.length > 0)
    {
        for(var i=0;i<aButton.length;i++)
        {
            if(Epoint_Button[aButton[i]].Type != "delete")
                continue;
            Epoint_Button[aButton[i]].HasClick = false;
        }
    }
    window.close();
}

function NormalButtonClick()
{
    if(aButton != null && aButton.length > 0)
    {
        for(var i=0;i<aButton.length;i++)
        {
            if(Epoint_Button[aButton[i]].Type != "delete")
                continue;
            Epoint_Button[aButton[i]].HasClick = false;
        }
    }
}

function ConfirmInfo()
{
    if(this.HasClick)
    {
        this.HasClick = false;
        return confirm(this.RaiseMsg);
    }
    return true;
}

function ConfirmDelButton()
{
    
    if(aButton != null && aButton.length > 0)
    {
        for(var i=0;i<aButton.length;i++)
        {
            if(Epoint_Button[aButton[i]].Type != "delete")
                continue;
            if(Epoint_Button[aButton[i]].HasClick && !Epoint_Button[aButton[i]].Confirm())
                return false;
        }
    }
    return true;
}

function ButtonClick(evt)
{
    if(evt == null) evt = window.event;
	if(evt != null)
	{
		var elem = Epoint_getSrcElement(evt);
		var but = Epoint_Button[elem.id];
		if(but)
		{
		    if(aButton != null && aButton.length > 0)
            {
                for(var i=0;i<aButton.length;i++)
                {
                    if(Epoint_Button[aButton[i]].Type != "delete")
                        continue;
                    Epoint_Button[aButton[i]].HasClick = false;
                }
            }
            but.HasClick = true;
		    
		}
	}    
}

function EpointremoveEventListener(elem, evt, fn)
{ 
	try
	{
		if(elem && elem.EpointremoveEventListener)
		{
			elem.EpointremoveEventListener(evt, fn);
			return;
		}
	}catch(ex){}
	try
	{
		if(elem && elem.detachEvent)
			elem.detachEvent('on' + evt, fn);
	}catch(ex){}
}
	
	
function EpointaddEventListener(elem,evtName,fn,flag)
{ 
	try{if(elem.addEventListener){elem.addEventListener(evtName,fn,flag==true); return;}}catch(ex){}	
	try{if(elem.attachEvent){elem.attachEvent("on"+evtName,fn); return;}}catch(ex){}
	var old;	
	eval("old = elem.on"+evtName);
	var sF=fn.toString();
	var i=sF.indexOf("(")+1;
	try
	{
	if((typeof old =="function") && i>10)
	{
		old=old.toString();
		
		var args=old.substring(old.indexOf("(")+1,old.indexOf(")"));
		args=replace(args," ","");
		if(args.length>0) args=args.split(",");
		
		old=old.substring(old.indexOf("{")+1,old.lastIndexOf("}"));
		
		sF=sF.substring(9,i);
		if(old.indexOf(sF)>=0)return;
		var s="fn=new Function(";
		for(i=0;i<args.length;i++)
		{
			if(i>0)sF+=",";
			s+="\""+args[i]+"\",";
			sF+=args[i];
		}
		sF+=");"+old;
		eval(s+"sF)");
	}
	eval("elem.on"+evtName+"=fn");
	}catch(ex){}
}
