/*
 * $Id$
 * (c) 2011 Tallence GmbH
 */
function SelectNode(f){function i(a,b,c){a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent&&a.attachEvent("on"+b,c)}function l(a,b,c){a.removeEventListener?a.removeEventListener(b,c,!1):a.detachEvent&&a.detachEvent("on"+b,c)}function j(a,b){if(b&&!t(a,b))a.className?a.className+=" "+b:a.className=b}function p(a,b){a.className=a.className.replace(RegExp("\\s?\\b"+b+"\\b"),"")}function t(a,b){if(a.className.search(RegExp("\\b"+b+"\\b"))!=-1)return!0;return!1}function u(a){if(typeof a.textContent==
"string")return a.textContent;if(typeof a.innerText=="string")return a.innerText;return""}function q(a,b){if(typeof a.textContent=="string")a.textContent=b;else if(typeof a.innerText=="string")a.innerText=b}function v(a){a.preventDefault&&a.preventDefault();return!1}function C(a){for(var b=document.createElement("ul"),c=0,g=a.firstChild;g;g=a.childNodes[++c])if(g.nodeType==1){var d=document.createElement("li");switch(g.nodeName.toLowerCase()){case "optgroup":q(d,g.getAttribute("label"));d.appendChild(C(g));
d.className=H;j(d,g.className);break;case "option":q(d,u(g));d.className=w;j(d,g.className);if(g.selected)j(d,x),k=e.length;y.push(g);e.push(d);break;default:continue}b.appendChild(d)}return b}function D(a){if(!(a<0||a==e.length)){p(e[h],m);var b=e[a];j(b,m);h=a;if(b.offsetTop<c.scrollTop)c.scrollTop=b.offsetTop;else if(b.offsetTop+b.offsetHeight>c.scrollTop+c.clientHeight)c.scrollTop=b.offsetTop+b.offsetHeight-c.clientHeight}}function E(a){if(a!=k){p(e[k],x);j(e[a],x);y[k].selected=!1;y[a].selected=
!0;k=a;var b;document.createEvent?(a=document.createEvent("HTMLEvents"),a.initEvent("change",!1,!0),b=a):document.createEventObject?(a=document.createEventObject(),a.type="change",b=a):b=void 0;a=f;a.dispatchEvent?a.dispatchEvent(b):a.fireEvent&&a.fireEvent("on"+b.type,b)}}function z(a,b,d){for(var c=a;c;c=b?c.nextSibling:c.previousSibling)if(c.nodeType==1)switch(c.nodeName.toLowerCase()){case "a":case "input":case "select":case "textarea":return c.focus(),!0;default:if(!d&&c==a||!c.childNodes.length)continue;
if(z(b?c.firstChild:c.lastChild,b,!0))return!0}if(d||!a.parentNode)return!1;return z(a.parentNode,b)}function A(){n=!1;d.focus()}function B(a){if((a.target||a.srcElement)==f)n=!0,d.focus(),j(e[k],m),h=k}function F(a){for(var b=a.target||a.srcElement;b;b=b.parentNode)switch(b){case c:a=a.target||a.srcElement;if(a.nodeType!=1||a.nodeName.toLowerCase()!="li"||!t(a,w))return;for(b=e.length-1;b>-1;b--)if(e[b]==a){E(b);d.blur();break}return;case document.documentElement:d.blur();return}}function G(a){n||
(n=!0,l(c,"mouseover",r),i(c,"mousemove",s));switch(a.keyCode){case 38:return D(h-1),v(a);case 40:return D(h+1),v(a);case 9:E(h);d.blur();if(a.shiftKey)var b=!1,e=d.previousSibling||d.parentNode;else b=!0,e=d.nextSibling||d.parentNode;z(e,b);return v(a)}}function s(){n=!1;l(c,"mousemove",s);i(c,"mouseover",r)}function r(a){a=a.target||a.srcElement;if(!(a.nodeType!=1||a.nodeName.toLowerCase()!="li"||!t(a,w)))for(var b=e.length-1;b>-1;b--)if(a==e[b]){p(e[h],m);j(e[b],m);h=b;break}}if(!f||typeof f!=
"object"||f.nodeType!=1||f.nodeName.toLowerCase()!="select")return null;var d=document.createElement("div"),H="optgroup",w="option",m="select",x="selected",o=document.createElement("div"),c,y=[],e=[],h,k,n;d.focus=function(){l(f,"focus",B);l(o,"click",A);n?i(c,"mousemove",s):i(c,"mouseover",r);window.setTimeout(function(){i(document.documentElement,"click",F)},0);i(document.documentElement,"keydown",G);j(d,"hover");h=k;j(e[h],m);c.style.display=""};d.blur=function(){l(document.documentElement,"click",
F);l(document.documentElement,"keydown",G);n?l(c,"mousemove",s):l(c,"mouseover",r);i(f,"focus",B);i(o,"click",A);p(d,"hover");q(o,u(e[k]));p(e[h],m);c.style.display="none"};(function(){var a=document.createElement("div");a.className="select-node";a.style.height="0";a.style.overflow="hidden";i(f,"focus",B);if(f.id)d.id=f.id+"-select";d.className="select";j(d,f.className);f.parentNode.insertBefore(d,f);a.appendChild(f);d.appendChild(a);o.className="select-input";i(o,"click",A);d.appendChild(o);c=C(f);
c.className="select-options";c.style.display="none";q(o,u(e[k]));d.appendChild(c)})();return d}jQuery.fn.msDropDown=function(){return this.each(function(){new SelectNode(this)})};
