function toSelect(source,qbe,evt){
    if(evt==null)evt=event;
	if (evt.ctrlKey){
		source.style.background = 'red';
		var imeVarijableUOkviru = source.getAttribute("clientCache");//param.clientCache;
		var selektiranaOpcija = source.value;
		if (null==parent[imeVarijableUOkviru]){ // još nije bila učitana
			var allcookies = document.cookie;
			var pos = allcookies.indexOf("MOL=");
			var value;
			if (pos != -1){
				var start = pos + 4;
				var end = allcookies.indexOf(";", start);
				if (end == -1) end = allcookies.length;
				value = unescape(allcookies.substring(start, end));
			}
			else
				alert("Fali cookie!");
			var opt=selectSingleNodeIEF(new Remote("Microline.Data.Custom","Microline.Data.Custom.FillCache","optionString").evaluate(new String(imeVarijableUOkviru)).documentElement,"/msg/value").firstChild.nodeValue;
			if (opt == "") return;
			parent[imeVarijableUOkviru]=opt;
		}

		var izabrani=parent[imeVarijableUOkviru];
		var i, stariIzbor=selektiranaOpcija;

		if (stariIzbor != ""){
			i=izabrani.indexOf("value='" + stariIzbor + "'");
			if (i>0) izabrani=izabrani.substr(0,i) + "selected " + izabrani.substr(i);
		}

		var s = "";
		if (source._onBlur != null && source._onBlur != "") s += " onBlur=\"" + source._onBlur + "\"";
		if (source._onChange != null && source._onChange != "") s += " onChange=\"" + source._onChange + "\"";
		if (source._onchange != null && source._onchange != "") s += " onChange=\"" + source._onchange + "\"";
		if (source._onClick != null && source._onClick != "") s += " onClick=\"" + source._onClick + "\"";
		if (source._onKeyPress != null && source._onKeyPress != "") 
			s += " onKeyPress=\"" + source._onKeyPress + "reposition(this);\"";
		else
			s += " onKeyPress=\"reposition(this);\"";
		if (source._onFocus != null && source._onFocus != "") 
			s += " onFocus=\"" + source._onFocus + "this.accu='';\"";
		else
			s += " onFocus=\"this.accu='';\"";

		source.outerHTML = "<select name='" + source.id + "' id='" + source.id + "'" + s + "><option></option>" +
			izabrani +	"</select>";
	}
	if (evt.altKey||qbe){
		var rez=window.open("QBE" + source.getAttribute("clientCache") + ".ashx?src=" + source.id,null,"height=800,width=500,status=yes,toolbar=no,menubar=no,location=no,scrollbars=yes");
	}
}

var incrPosition=0;
function fill(source, targetTag, value, name, onFocus, onKeyPress, features){
		
	dopuni(source,targetTag,value, "id='" + name + "' name='" + name + 
	"' onFocus='this.accu=\"\";" + onFocus + "' onkeypress='reposition(this);" +
	onKeyPress + "' " + features);
}

function fillExt(tagName, value, tagSource, onKeyPress, onFocus, features){
	var posit="xpos" + incrPosition++;
	document.write ("<span id=\"" + posit + "\"><input id=\"" + tagName + "\" name=\"" + tagName + "\" value=\"" + value + "\" ");	
	document.write ("onfocus=\"fill('" + tagSource + "','" + posit + "', " +	"'" + value + "', " +
		"'" + tagName + "','"+ onFocus + "','" + onKeyPress + "','" + features + "');\"></span>");
	//document.getElementById(posit).focus();
}

function dopuni(imeVarijableUOkviru, imeTaga, selektiranaOpcija, dodatniTekst){
	/*Ako u okviru s podacima nije inicijalizirana varijabla "imeVarijableUOkviru", 
	inicijalizira se.
	Rezultirajuća drop-down lista se sprema u tag "imeTaga"
	"selektiranaOpcija" ostaje selektirana u toj listi
	"dodatniTekst" se kopira unutar taga drop-down liste.
	Ako se za imeTaga upiše prazan string, samo se generira string u vanjskom okviru koji se ne
	upisuje u tag.
	*/
	
	if (null==parent[imeVarijableUOkviru]){ // još nije bila učitana
		var allcookies = document.cookie;
		var pos = allcookies.indexOf("MOL=");
		var value;
		if (pos != -1){
			var start = pos + 4;
			var end = allcookies.indexOf(";", start);
			if (end == -1) end = allcookies.length;
			value = unescape(allcookies.substring(start, end));
		}
		else
			alert("Fali cookie!");
		var opt=selectSingleNodeIEF(new Remote("Microline.Data.Custom","Microline.Data.Custom.FillCache","optionString").evaluate(new String(imeVarijableUOkviru)).documentElement,"/msg/value").firstChild.nodeValue;
		parent[imeVarijableUOkviru]=opt;
	}
	
	if (null!=document.getElementById(imeTaga) && imeTaga!=""){
		var izabrani=parent[imeVarijableUOkviru];
		var i, stariIzbor=selektiranaOpcija;
				
		if (stariIzbor != ""){
			i=izabrani.indexOf("value='" + stariIzbor + "'");
			if (i>0) izabrani=izabrani.substr(0,i) + "selected " + izabrani.substr(i);
		}
				
		document.getElementById(imeTaga).innerHTML="<select " + dodatniTekst + "><option></option>" +izabrani +	"</select>";
	}
}

function reposition(e){
	var ch=String.fromCharCode(event.keyCode).toLowerCase();
	if (this.accu==null) this.accu="";
	switch (event.keyCode){
		case 8, 10, 13:
			break;
		default:
			e.accu += ch;
			for (var i=0; i<e.options.length; i++){
				if(transmute(e.options[i].text.toLowerCase())>=transmute(e.accu)){
					e.options[i].selected=true;
					e.ret=e.options[i].value;
					e.i=i;
					break;
				}
			}
			return false;
			break;
	}
}

function transmute(str) {
	return str.replace(/(\u010D|\u0107)/g,"c").replace(/\u0111/g,"d").replace(/\u0161/g,"s").replace(/\u017E/g,"z");
}

function isTime(value){
    ///^([01]?[0-9]|2[0-3]:[0-5][0-9](:[0-5][0-9])?)$/ doesn't work. | spoils the logic
    if (value!=""&&!/^[012]?[0-9]:[0-5][0-9](:[0-5][0-9])?$/.test(value)) {alert(value + ' nije vrijeme');return false;}
	else return true;
}
function timeOut(elt){return isTime(elt.value);}

function isNumber(value){
	if (value.search(/^([+-]?\d+([,.]\d*)?)$/)==-1) {alert(value + ' nije broj');return false;}
	else return true;
}
function numberOut(elt){return elt.value==""||isNumber(elt.value);}

function normalizeDateTime(value){
	if (value=="")
	    return "";
	else{
		var pos=value.indexOf(" ");
		if (pos==-1){
			var normalized = normalizeDate(value);
			if (normalized!=null) return normalized + " 00:00";
		}
		else{
			var dt = value.substr(0,pos);
			var tm = value.substr(pos+1);
			var normalized = normalizeDate(dt);
			if (normalized!=null&&isTime(tm)) return normalized + " " + tm;
		}
		alert(value + " nije trenutak. Format je 'DD.MM.YYYY. HH:MM:SS' ili sličan.\nNpr. umjesto DD.MM.YYYY. mogu ići svi drugi formati za datum.\nUmjesto HH:MM:SS može ići HH:MM.");
	}
}
function dateTimeOut(elt){
    var normalized=normalizeDateTime(elt.value);
    if(normalized==null)return false;
    else{elt.value=normalized;return true;}
}

function dateOut(elt){
    var normalized=normalizeDate(elt.value);
    if(normalized==null)return false;
    else{elt.value=normalized;return true;}
}
function normalizeDate(value){
	try{
		var v=value;
		if (v=="")return "";
		else{
			var d = new Date();
		    var b = 0;
		    var s = "";
			switch (v.substr(0,1)){
				case "0":
					if (v.length==1){
						b=1;
					}
					break;
				case "-":
					if(isNaN(v.substr(1))){
						s = "Morate upisati broj iza minusa.";
						b=-1;
					}
					else{
						d.setTime(d.valueOf() - v.substr(1)*1000*60*60*24);
						b=1;
					}
					break;
				case "+":
					if(isNaN(v.substr(1))){
						s = "Morate upisati broj iza plusa.";
						b=-1;
					}
					else{
						d.setTime(d.valueOf() + v.substr(1)*1000*60*60*24);
						b=1;
					}
					break;
				default:
			}

			if (b==0 && v.length==6 && !isNaN(v)){
				d.setFullYear(v.substr(4,2));
				//31.3. postavlja mjesec za jedan više! Greška u setMonth. 11 pak mjesec postavlja u 12!
				d.setMonth(parseInt(v.substr(2,1)=="0"?v.substr(3,1):v.substr(2,2),10)-1);
				d.setDate(v.substr(0,2));
				b=1;
			}

			if (b==0){
				var arr = v.split(".");
				if (isNaN(arr[0])){
					s = "Format nije DD.MM.YY."
					b=-1
				}
				else{
					d.setDate(arr[0]);
					if (arr.length>=2){
						if (isNaN(arr[1]) && arr[1]!=""){
							s = "Format nije DD.MM.YY."
							b=-1
						}
						else{
							if (arr[1]!="") {
								d.setMonth(arr[1]-1);
								d.setDate(arr[0]);//Jer ne prihvaća 31 za mjesece koji ih nemaju pa se mora još jednom
							}
							if (arr.length>=3){
								if (isNaN(arr[2]) && arr[2]!=""){
									s = "Format nije DD.MM.YY.";
									b=-1;
								}
								else{
									if (arr[2]!=""){ 
										d.setFullYear(arr[2]);
										d.setMonth(arr[1]-1);
										d.setDate(arr[0]);
									}
									b=1;
								}
							}
							else
								b=1;
						}
					}
					else
						b=1;
				}
			}

			if (b==1 && d.getFullYear()<1900 && d.getFullYear()>=100){
				 s = "Godina ne može biti manja od 1900.";
				 b=0;
			}

			if (b==1) return d.getDate() + "." + (d.getMonth()+1) + "." + d.getFullYear() + ".";
			else{
				alert("Greška. " + s + "\nDozvoljeni formati su:" +
				"\n- dd.mm.yy. - prva i druga točka su obavezne, dd i mm mogu biti jedna" +
				"\nili 2 znamenke, yy može biti 2 do 4 znamenke" + 
				"\n- 0 - danas" +
				"\n- -d - danas minus d dana" +
				"\n- +d - danas plus d dana" +
				"\n- ddmmyy");
				return null;
			}
		}	
	} catch(e){
		alert(e.description);
	}
}

function copyStyleSheet(src,target) {
if(src!=null){
	doc=src.document;
	if (navigator.appVersion.indexOf("MSIE") < 0) {
		var newSS=target.createElement('style');
		var style = "";
		for (var i=0; i<doc.styleSheets[0].cssRules.length; i++) {
		style += doc.styleSheets[0].cssRules[i].cssText;
		}
		newSS.innerHTML = style;
		target.documentElement.childNodes[0].appendChild(newSS);
	} else {
		var ss = target.createStyleSheet();
		ss.cssText=doc.styleSheets[0].cssText;
	}
}
}

function selectSelect(select, value){
	if (select.options != null){
		for (var i=0; i<select.options.length; i++){
			if (select.options[i].value == value)
				select.options[i].selected = true;
		}
	}
	else
		select.value = value;
}

function moveComboAndToInput(idStart,idTarget,which){
	moveComboElt(idStart,idTarget);
	comboToInput(which==1?idStart:idTarget);
}

function moveComboElt(idStart,idTarget){
	var startCombo=document.getElementById(idStart); 
	var targetCombo=document.getElementById(idTarget); 
	for (var i=startCombo.options.length-1;i>=0;i--)
		if (startCombo.options(i).selected){
		var elOption=new Option; 
		elOption.value=startCombo.options(i).value; 
		elOption.text=startCombo.options(i).text;
		targetCombo.options.add(elOption);
		startCombo.options.remove(i);
		}
}

function comboToInput(id){
	var combo = document.getElementById(id+"_selected");
	var acc='';
	var accn='';
	for(var i=0;i<combo.options.length;i++){
		if(i!=0){acc+='#';accn+='#';}
		acc+=combo.options(i).value;
		accn+=combo.options(i).text;
	}
	document.getElementById(id+"Values").value=acc;
	document.getElementById(id+"Display").value=accn;
}

var timerId=null;

function typeAhead(elt,class_,method,thisIsCopy,incomplete,evt,assembly){
    if(parent&&parent.pull)parent.pull();
	var dd;
	if(document.getElementById("taCombo")==null){
		dd=document.createElement("div");
		dd.id="taCombo";
		dd.style.cssText="position:absolute;background:white;height:auto;border:1px solid #000000;overflow:auto;z-index:99;";
		dd.onmouseover=function(){dd.style.cursor='pointer';};
		dd.onclick=clk;
		dd.run=0;
		dd.incomplete=incomplete;
		document.body.appendChild(dd);
	}
	else{
		dd=document.getElementById("taCombo");
		dd.style.display='';
		dd.run++;
	}
	var thisRun=dd.run;
	var pt=elt;
	dd.x=0;dd.y=0;
	while(pt.offsetParent!=null){
		pt=pt.offsetParent;
		dd.y+=pt.offsetTop;
		dd.x+=pt.offsetLeft;
	}
    dd.srcDsp = elt;
    var srcDsp = elt;
	dd.srcValHidden=(thisIsCopy!=null&&thisIsCopy?document.getElementById(dd.srcDsp.id.substr(3)):null);
	dd.style.top=dd.y+elt.offsetTop+20;
	dd.style.left=dd.x+elt.offsetLeft;
	//dd.style.height="auto";
	switch(evt.keyCode){
		case 9:dd.style.display='none';break;//Tab
		case 13:break;//Rtn
		case 113:if(elt.getAttribute("clientCache")){dd.style.display='none';dd.selected=-1;toSelect(elt,true,evt);}break;//q else adjacentError(elt,"Nema prozora za izbor.");break;
		case 38:if(dd.selected>0)dd.selected--;selectDD(dd,true,srcDsp,dd.srcValHidden);break;//&
		case 40:if(dd.selected<dd.childNodes.length-1)dd.selected++;selectDD(dd,true,srcDsp,dd.srcValHidden);break;//(
		default:if(timerId!=null)clearTimeout(timerId);
		    timerId = setTimeout("new Remote('" + assembly + "','" + class_ + "','" + method + "',typeAheadBack).evaluate(new String('" + elt.value + "'),new AvoidRemote(" + thisRun + "),new AvoidRemote('" + elt.id + "'),new AvoidRemote(" + (dd.srcValHidden == null ? null : "'" + dd.srcValHidden.id + "'") + "));", 200); break;
	}
}

function adjacentError(elt,msg,ms){elt.insertAdjacentHTML("afterEnd","<span id='tempMsg'>"+msg+"</span>");setTimeout("document.getElementById('tempMsg').outerHMTL='';",100);}

function typeAheadBack(http, origArguments) {
    //var elt=document.getElementById(origArguments[2].value);
    var dd = document.getElementById("taCombo");
    if (dd != null && origArguments[1].value == dd.run) {
        var srcDsp = document.getElementById(origArguments[2].value);
        var srcValHidden = (origArguments[2].value == null ? null : document.getElementById(origArguments[3].value));
        var x = serializeXml(selectSingleNodeIEF(http.responseXML, "/msg/value").firstChild);
        var raw = x.substring(9, x.length - 3);
        if (raw.substring(0, 1) == "@") {
            dd.innerHTML = "Tipkanje komande u tijeku.<br/>@a - ispis svih<br/>@r - obrnuto sortirano<br/>@e - pretraga po dod. podacima (zasad samo artikli i police)<br/>@l - limitirana pretraga (zasad samo police)<br/>@ce; - uredi kupca<br/>@ce?; - uredi kupca ?<br/>@ve; - uredi dobavljača<br/>@ve?; - uredi dobavljača ?<br/>@oe; - uredi NK<br/>@oe?; - uredi NK ?<br/>@pe; - uredi ND<br/>@pe?; - uredi ND ?<br/>@ie; - uredi artikl<br/>@ie?; - uredi artikl ?<br/>@pd; - RUC";
            if (raw.length == 4)
                switch (raw) {
                case "@ce;": location.replace("Customer.ashx"); break;
                case "@ie;": location.replace("Item.ashx"); break;
                case "@oe;": location.replace("SO.ashx"); break;
                case "@pe;": location.replace("PO.ashx"); break;
                case "@ve;": location.replace("Vendor.ashx"); break;
                case "@pd;": location.replace("PriceDifference.ashx"); break;
            }
            else {
                var keyMaster = raw.substr(3, raw.length - 4);
                if (raw.search(/^@ce\w+;/) != -1) location.replace("Customer.ashx?keyMaster=" + keyMaster);
                if (raw.search(/^@oe\w+;/) != -1) location.replace("SO.ashx?keyMaster=" + keyMaster);
                if (raw.search(/^@pe\w+;/) != -1) location.replace("Item.ashx?keyMaster=" + keyMaster);
                if (raw.search(/^@pe\w+;/) != -1) location.replace("PO.ashx?keyMaster=" + keyMaster);
                if (raw.search(/^@ve\w+;/) != -1) location.replace("Vendor.ashx?keyMaster=" + raw.substr(3, raw.length - 4));
            }
        }
        else {
            dd.innerHTML = raw;
            dd.selected = -1;
            var bestFit = null;
            if (srcDsp.value != "" && srcDsp.value.length > 0)
                for (var i = 0; i < dd.childNodes.length; i++)
                    if (dd.childNodes[i].firstChild.nodeValue.toLowerCase().indexOf(srcDsp.value.toLowerCase()) >= 0) {
                        if (bestFit == null) bestFit = i;
                        if (dd.childNodes[i].getAttribute("v").toLowerCase() == srcDsp.value.toLowerCase()) { bestFit = i; break; }
                    }
            dd.selected = bestFit;
            selectDD(dd, false, srcDsp, srcValHidden);
        }
    }
    timerId = null;
}

function selectDD(dd,sync,srcDsp,srcValHidden){
	if(srcValHidden!=null){srcValHidden.value="";srcDsp.size=srcDsp.value.length+1;}
	if(dd.childNodes.length>0){
		for(var i=0;i<dd.childNodes.length;i++)dd.childNodes[i].style.cssText="";
		if(dd.selected>=0&&dd.childNodes[dd.selected]!=null){
			dd.childNodes[dd.selected].style.color="white";
			dd.childNodes[dd.selected].style.backgroundColor="navy";
			if(sync){
				if(srcValHidden!=null){
					srcDsp.value=dd.childNodes[dd.selected].innerHTML;//previously innerText but not compatible with FF
					srcValHidden.value=dd.childNodes[dd.selected].getAttribute("v");
				}
				else
					srcDsp.value=dd.childNodes[dd.selected].getAttribute("v");
			}
		}
	}
	//if(srcValHidden!=null)srcDsp.size=srcDsp.value.length+1;
}

function clk(evt){
    if(evt==null)evt=event;
    var elt=(evt.target)?evt.target:evt.srcElement;
	var dd=document.getElementById("taCombo");
	for(var i=0;i<dd.childNodes.length;i++)
		if (dd.childNodes[i]==elt){dd.selected=i;break;}
	selectDD(dd,true,dd.srcDsp,dd.srcValHidden);
	if(dd.srcDsp.parentNode!=null){
		dd.srcDsp.focus();
		var tRng=dd.srcDsp.createTextRange();
		tRng.moveEnd("word",1);
		tRng.select();
	}
	dd.style.display='none';
}

function hideDD(evt) {
    var dd = document.getElementById("taCombo");
    if (dd != null) {
        if (dd.selected != null && dd.selected != -1 && !dd.incomplete){
            var v = dd.childNodes[dd.selected].getAttribute("v");
            if (dd.srcValHidden != null)
            { dd.srcDsp.value = dd.childNodes[dd.selected].innerHTML; dd.srcValHidden.value = v; }
            else
                if (dd.srcDsp.value.length <= v.length)//the last typeAheadBack() may not be finished still and the list value may override customer's last entry
                    dd.srcDsp.value = v;
        }
        setTimeout("hide()", 300);
    }
}

function hide() {
    var dd = document.getElementById("taCombo");
    dd.style.display = 'none';
    dd.selected = null;
}

function serializeXml(oNode){
    if(oNode==null)return "<![CDATA[]]>";
    if(window.ActiveXObject)
        return oNode.xml;
    else{
        var oSerializer=new XMLSerializer();
        return oSerializer.serializeToString(oNode);
    }
}

function showError(text,append,isWrn){
   if(parent){
        var img=parent.document.getElementById("errImg");
        var msg=parent.document.getElementById("errMsg");
        img.style.display="block";
        if(isWrn){if(append)msg.innerHTML+="\n"+text;else msg.innerHTML=text;msg.style.display="block";}
        else {if(append)img.title+="\n"+text;else img.title=text;}
        setTimeout(hideError, 15000);
   }
}
function hideError(){
    parent.document.getElementById("errImg").style.display="none";
    parent.document.getElementById("errMsg").style.display="none";
}


//XML DOM adapter methods
//Ref. http: //www.webreference.com/programming/javascript/definitive2/4.html
function selectSingleNodeIEF(xmlDoc, xPath) {
    if (xmlDoc == null)
        return null;
    else
        if (window.ActiveXObject)
            return xmlDoc.selectSingleNode(xPath);
        else {
            var xpe = new XPathEvaluator();
            var nsResolver = xpe.createNSResolver(xmlDoc.ownerDocument == null ? xmlDoc.documentElement : xmlDoc.ownerDocument.documentElement);
            var results = xpe.evaluate(xPath, xmlDoc, nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
            return results.singleNodeValue;
        }
}

function selectNodesIEF(xmlDoc, xPath) {
    if (window.ActiveXObject)
        return xmlDoc.selectNodes(xPath);
    else {
        var oEvaluator = new XPathEvaluator();
        var oResult = oEvaluator.evaluate(xPath, xmlDoc, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
        var aNodes = new Array;
        if (oResult != null) {
            var oElement = oResult.iterateNext();
            while (oElement) {
                aNodes.push(oElement);
                oElement = oResult.iterateNext();
            }
        }
        return aNodes;
    }
}

function getXML(xmlElt) {
    if (xmlElt == null)
        return "";
    else {
        var s = "";
        for (var i = 0; i < xmlElt.childNodes.length; i++) {
            var elt = xmlElt.childNodes[i];
            if (elt.nodeName == "#text")
                s += xmlElt.firstChild.nodeValue;
            else {
                s += "<" + elt.nodeName;
                switch (elt.nodeType) {
                    case 1: //Element
                        for (var j = 0; j < elt.attributes.length; j++) {
                            var att = elt.attributes[j];
                            s += " " + att.nodeName + "=\"" + att.nodeValue + "\"";
                        }
                        break;
                }
                s += ">" + getXML(elt) + "</" + elt.nodeName + ">";
            }
        }
        return s;
    }
}

//DOM elements creation
function Select(xmlDoc, id) {
    this.tag = document.createElement("select");
    this.tag.setAttribute("id", id);
    this.tag.setAttribute("name", id);
    var lines = selectNodesIEF(xmlDoc, "/msg/value/root/line");
    if (lines != null) {

        this.tag.appendChild(document.createElement("option"));
        for (var i = 0; i < lines.length; i++) {
            var line = lines[i];
            var val = line.childNodes[0].firstChild.nodeValue;
            var option = document.createElement("option");
            option.setAttribute("value", val);
            val = line.childNodes[1].firstChild.nodeValue;
            option.appendChild(document.createTextNode(val));
            this.tag.appendChild(option);
        }
    }
}

function mrk(tag) { if (document.getElementById(tag) != null) document.getElementById(tag).value = 1; } //Marks changed
function clickAny(e) {
    if (e.ctrlKey)
        if (e.charCode == 81 || e.charCode == 113) window.location.replace("CommandPrompt.ashx");
        if (e.charCode == 13) this.form.submit();
    return false;
}
