/*
 *	ComboBox
 *	By Jared Nuzzolillo
 *
 *	Updated by Erik Arvidsson
 *	http://webfx.eae.net/contact.html#erik
 *	2002-06-13	Fixed Mozilla support and improved build performance
 *
 */

Global_run_event_hook = true;
Global_combo_array    = new Array();
Global_combo_open     = null;

Array.prototype.remove=function(dx)
{ 
    if(isNaN(dx)||dx>this.length){self.status='Array_remove:invalid request-'+dx;return false}
    for(var i=0,n=0;i<this.length;i++)
    {  
        if(this[i]!=this[dx])
        {
            this[n++]=this[i]
        }
    }
    this.length-=1
}

function ComboBox_make()
{
    var bt,nm;
    nm = this.name+"txt"; 
    
    this.txtview = document.createElement("INPUT")
    this.txtview.type = "text";
    this.txtview.name = nm;
    this.txtview.id = nm;
    this.txtview.className = "combo-input"
    this.view.appendChild(this.txtview);
        
    this.valcon = document.createElement("INPUT");
    this.valcon.type = "hidden";
    this.view.appendChild(this.valcon)
   
    var tmp = document.createElement("IMG");
    tmp.src = "___";
    tmp.style.width = "50px";
    tmp.style.height = "0";
    this.view.appendChild(tmp);
    
    var tmp = document.createElement("BUTTON");
    tmp.appendChild(document.createTextNode('Artikelliste'));
    tmp.className = "combo-button";
    
	this.view.appendChild(tmp);
   	tmp.onfocus = function () { this.blur(); };
	tmp.onclick = new Function ("", this.name + ".toggle()");
}

function ComboBox_choose(realval,txtval)
{
    
   strTxtValDaFiltrare = txtval;
   strToFind2 = /<br>/i;
   strTxtValFiltrata = strTxtValDaFiltrare.replace(strToFind2,"");
	
  
    this.value         = realval;
    var samstring = this.name+".view.childNodes[0].value='"+strTxtValFiltrata+"'"
    window.setTimeout(samstring,1)
    this.valcon.value  = realval;
    window.location=realval;

}


function ComboBox_mouseDown(e) {
    var obj, len, el, i, par_el;
    
    el = e.target ? e.target : e.srcElement;

    while (el.nodeType != 1) el = el.parentNode;
    var elcl = el.className;

    par_el = el;    
    while (par_el.nodeName != "HTML" && par_el.nodeName != "DIV") {
        par_el = par_el.parentNode;
    }

    new Browser();
    Browser.getAppName            = Browser_getAppName;
    Browser.getAppVersion         = Browser_getAppVersion;
    Browser.getUserAgent          = Browser_getUserAgent;
    Browser.isNS                  = Browser_isNS;
    Browser.isIE                  = Browser_isIE;
    Browser.isSafari              = Browser_isSafari;
    Browser.isOpera               = Browser_isOpera;
    Browser.isMozilla             = Browser_isMozilla;
    Browser.isFirefox             = Browser_isFirefox;

    var ie      = Browser.isIE();
    var ns      = Browser.isNS();
    var opera   = Browser.isOpera();
    var safari  = Browser.isSafari();
    var mozilla = Browser.isMozilla();
    var firefox = Browser.isFirefox();
    
    if ((el.nodeName != "scrollbar" || el.parentNode.nodeName == "HTML") || ie || safari || el.nodeName == "BUTTON") {
	    if (elcl.indexOf("combo-") != 0 || elcl.indexOf("combo-button") == 0) {
					
	        len = Global_combo_array.length;

	        for(i = 0; i < len; i++) {
	         
	            curobj = Global_combo_array[i];
	        	
	            if (curobj.opslist) {
	                curobj.opslist.style.display = 'none';
	                curobj.opslist.style.position = 'absolute';
	            }
	        }
        }
    } 
}

function ComboBox_handleKey(e)
{
    var key,obj,eobj,el,strname;
    eobj = e;
    key  = eobj.keyCode;
    el = e.target ? e.target : e.srcElement;
    while (el.nodeType != 1) el = el.parentNode;
    elcl = el.className
    if(elcl.indexOf("combo-")==0)
    {
        if(elcl.split("-")[1]=="input")
        {
            strname = el.id.split("txt")[0]
            obj = window[strname];
			
            obj.expops.length=0
            obj.update();
            obj.build(obj.expops);
            if(obj.expops.length==1&&obj.expops[0].text=="(No matches)"){}//empty
            else{obj.opslist.style.display='block';}
            obj.value = el.value;
            obj.valcon.value = el.value;
        }
     }
}

function ComboBox_update()
{
    var opart,astr,alen,opln,i,boo,zz;
    boo=false;
    opln = this.options.length
	astr = this.txtview.value.toLowerCase();
    alen = astr.length;
    
    if(alen == 0) {
        for(i = 0; i < opln; i++) {
            this.expops[this.expops.length] = this.options[i];
            boo=true;
        }
    }
    else {
        for(i = 0; i < opln; i++) {

            strOptDaFiltrare = this.options[i].text.toLowerCase();
            strToFind1 = /<br>/i;
            strOptFiltrata = strOptDaFiltrare.replace(strToFind1,"");
		
		if (strOptFiltrata.indexOf(astr)!=-1) {
                
               
                this.expops[this.expops.length] = this.options[i];
                boo=true;
            }
        }
    }
    if(!boo) {
    	this.expops[0] = new ComboBoxItem("(No matches)","")
    }
}


function ComboBox_remove(index)
{
    this.options.remove(index)
}

function ComboBox_add() {
    var i,arglen;
    arglen = arguments.length;
    
    for(i=0;i<arglen;i++) {
        this.options[this.options.length]=arguments[i];
    }
}

function ComboBox_build(arr) {
    var str, arrlen;
    arrlen = arr.length;
    str = '<table class="combo-list-width" cellpadding=2 cellspacing=2>';
    var strs = new Array(arrlen);
    
    for(var i = 0; i < arrlen; i++) {
        strs[i] = '<tr>' +
			'<td class="combo-item" onClick="'+this.name+'.choose(\''+arr[i].value+'\',\''+arr[i].text+'\');'+this.name+'.opslist.style.display=\'none\';"' +
			'onMouseOver="this.className=\'combo-hilite\';" onMouseOut="this.className=\'combo-item\'" ><table cellpadding=0 cellspacing=0><td class=combo-item2 valign=top width=110>'+arr[i].text+'</td><td class=combo-item>'+arr[i].text2+'</td></table></td>' +
			'</tr>';
    }
    str = str + strs.join("") + '</table>';
    
    if(this.opslist) {
    	this.view.removeChild(this.opslist);
    }
    
    this.opslist = document.createElement("DIV")
    this.opslist.style.position = 'absolute';
    this.opslist.innerHTML = str;
    this.opslist.style.display = 'none';
    this.opslist.className = "combo-list";
    this.opslist.onselectstart = returnFalse;
    this.view.appendChild(this.opslist);    
}

function ComboBox_toggle() {
    if(this.opslist) {
        if(this.opslist.style.display == "block") {
            this.opslist.style.display = "none"
        }
        else {
            this.update();
            this.build(this.options);
            this.view.style.zIndex = ++ComboBox.prototype.COMBOBOXZINDEX
            this.opslist.style.display = "block"
        }
    }
    else {
        this.update();
        this.build(this.options);
        this.view.style.zIndex = ++ComboBox.prototype.COMBOBOXZINDEX
        this.opslist.style.display = "block"
    }
}

// init of the combo box
function ComboBox() {
    if(arguments.length == 0) {
        self.status = "ComboBox invalid - no name arg"
    }

    this.name     = arguments[0];
    
    this.par      = document.getElementById(arguments[1]);// || document.body
    
    this.view     = document.createElement("DIV");
    
    new Browser();
    Browser.getAppName            = Browser_getAppName;
    Browser.getAppVersion         = Browser_getAppVersion;
    Browser.getUserAgent          = Browser_getUserAgent;
    Browser.isNS                  = Browser_isNS;
    Browser.isIE                  = Browser_isIE;
    Browser.isSafari              = Browser_isSafari;
    Browser.isOpera               = Browser_isOpera;
    Browser.isMozilla             = Browser_isMozilla;
    Browser.isFirefox             = Browser_isFirefox;

    var ie      = Browser.isIE();
    var ns      = Browser.isNS();
    var opera   = Browser.isOpera();
    var safari  = Browser.isSafari();
    var mozilla = Browser.isMozilla();
    var firefox = Browser.isFirefox();
    
    //Mozilla & Safari
    if (!ie) {
    	this.view.setAttribute("ID", arguments[1]);
    }
    //IE (& Safari)
    else {
        this.view_id  = document.createAttribute("ID");
        this.view_id.nodeValue = arguments[1];
        this.view.setAttributeNode(this.view_id);
    }
    
    this.view.style.position = 'relative';
    this.options  = new Array();
    this.expops   = new Array();
    this.value    = "";

    this.build  = ComboBox_build;
    this.make   = ComboBox_make;
    this.choose = ComboBox_choose;
    this.add    = ComboBox_add;
    this.toggle = ComboBox_toggle;
    this.update = ComboBox_update;
    this.remove = ComboBox_remove;

    this.make()
    this.txtview = this.view.childNodes[0]
    this.valcon  = this.view.childNodes[1]
    
    this.par.appendChild(this.view)

    Global_combo_array.push(this);
    
    if(Global_run_event_hook) {
    	ComboBox_init()
    }
}

ComboBox.prototype.COMBOBOXZINDEX = 1000 //change this if you must

function ComboBox_init() {
	if (document.addEventListener) {
		document.addEventListener("keyup", ComboBox_handleKey, false );
		document.onmousedown = ComboBox_mouseDown;
	}
	else if (document.attachEvent) {
		document.attachEvent("onkeyup", function () { ComboBox_handleKey(window.event); } );
		document.attachEvent("onmousedown", function () { ComboBox_mouseDown(window.event); } );
	}
	
    Global_run_event_hook = false;
}

//
function returnFalse() {
	return false
}

// create a combo box item
function ComboBoxItem(text,text2,value) {
    this.text  = text;
    this.text2  = text2;
    this.value = value;
}

/***** BROWSER CHECK *****/
function Browser() {
}
function Browser_getAppName() {
	return navigator.appName;
}
function Browser_getAppVersion() {
	return navigator.appVersion;
}
function Browser_getUserAgent() {
	return navigator.userAgent;
}
function Browser_isNS() {
	var ns = this.getUserAgent().indexOf('Netscape') != -1;

	if (ns && this.isFirefox()) {
		return false;	
	} else if (ns && this.isSafari()) {
		return false;
	} else {
		return ns;
	}
}
function Browser_isSafari() {
	return this.getUserAgent().indexOf('Safari') != -1;
}
function Browser_isIE() {
	if (this.isOpera()) {
		return false;
	} else {
		return this.getAppName().indexOf('Microsoft') != -1;
	}
}
function Browser_isOpera() {
	return this.getUserAgent().indexOf('Opera') != -1;
}
function Browser_isMozilla() {
	if (this.isNS()) {
		return false;
	} else if (this.isOpera()) {
		return false;
	} else if (this.isFirefox()) {
		return false;
	} else {
		return this.getUserAgent().indexOf('Mozilla') != -1;
	}
}
function Browser_isFirefox() {
	return this.getUserAgent().indexOf('Firefox') != -1;
}
/***** BROWSER CHECK *****/

document.write('<link rel="STYLESHEET" type="text/css" href="ComboBox.css">')
