/*------------------------------------------------------------------------------
Function:       eCSStender.css3-selectors.js
Author:         Aaron Gustafson (aaron at easy-designs dot net)
Creation Date:  2009-09-17
Version:        0.3
Homepage:       http://github.com/easy-designs/eCSStender.css3-selectors.js
License:        MIT License 
Note:           If you change or improve on this script, please let us know by
                emailing the author (above) with a link to your demo page.
------------------------------------------------------------------------------*/
(function(C){if(typeof C=="undefined"){return}var h=C.methods.findBySelector,f=C.isSupported,c=C.embedCSS,A=C.applyWeightedStyle,a=function(e,G,F){var H=E,I;for(I in G){if(C.isInheritedProperty(G,I)){continue}H+=I+n+G[I]+w}if(H!=E){c(e+k+H+t,F)}},g=function(F,J,G,I){if(D(G)){return}try{var K=h(F),H=K.length;while(H--){A(K[H],J,I)}}catch(L){}},B=function(){},D=function(e){return e!="screen"},p=function(e){return e.replace(u,"$1$2$3$4$5")},y=function(G,e,F){if(G.addEventListener){y=function(J,H,I){J.addEventListener(H,I,false)}}else{y=function(J,H,I){var K="e";J[K+H+I]=I;J[H+I]=function(){var L=window.event;L.target=L.srcElement;L.preventDefault=function(){this.returnValue=false};L.stopPropagation=function(){this.cancelBubble=true};J[K+H+I](L)};J.attachEvent("on"+H,J[H+I])}}y(G,e,F)},v="net.easy-designs.",m="selector",o="properties",l="specificity",i="click",r="*",E="",k="{",t="}",j="(",s=")",n=":",w=";",x="-",z=".",d="Your chosen selector library does not support this selector: ",u=/(.*\()\s*(?:(\d+n?|odd|even)\s*(\+|-)?\s*(\d+)?)\s*(\).*)/g,q=document.createElement("div"),b=document.createElement("p");if(!(h instanceof Function)){throw new Error("eCSStender.methods.findBySelector is not defined. eCSStender.css3-selectors.js is quitting.")}C.register({fingerprint:v+"compound-class-selector",selector:/(?:\.\S+){2,}/,test:function(){var F=q.cloneNode(true),e=b.cloneNode(true);e.className="foo";F.appendChild(e);return(f(m,"div p.bar.foo",F,e))}},r,function(H,K,M,F){var L=/((?:\.\S+){2,})/,G=H.replace(L,"$1"),e,J,I;G=G.split(".");G.shift();e=G.pop();J=C.lookup({selector:new RegExp("\\."+e),specificity:F,media:M},r);for(I=0;I<J.length;I++){g(J[I][m],J[I][o],M,J[I][l])}});(function(){var F=["div p[title]",'div p[title="a b-c"]',"div p[title*=a]","div p[title~=a]","div p[title^=a]","div p[title$=c]","div p[title|=c]"],e=F.length,H=q.cloneNode(true),G=b.cloneNode(true);G.setAttribute("title","a b-c");H.appendChild(G);while(e--){(function(I){C.register({fingerprint:v+"attribute-selector-"+e,selector:/\[.*\]/,test:function(){return !f(m,I,H,G)}},r,g)})(F[e])}})();(function(){var e=/^\s?(?:html)?:root/,H="html";function G(I,L,J,K){if(D(J)||!I.match(e)){return}g(I,L,J,K)}function F(I,L,J,K){if(D(J)||!I.match(e)){return}I=I.replace(e,H);g(I,L,J,K)}C.register({fingerprint:v+"root",selector:/:root/,test:function(){html=document.getElementsByTagName(H)[0];return(!f(m,":root",false,html))}},r,function(I,L,J,K){if(D(J)){return}var M=G;try{h(I)}catch(N){M=F}M(I,L,J,K);return M})})();C.register({fingerprint:v+"nth-child",selector:/:nth-child\(\s*(?:even|odd|[+-]?\d+|[+-]?\d*?n(?:\s*[+-]\s*\d*)?)\s*\)/,test:function(){var F=q.cloneNode(true),e=b.cloneNode(true);F.appendChild(e);return(!f(m,"div p:nth-child( 2n + 1 )",F,e))}},r,function(e,I,F,H){e=p(e);var G="p:nth-child(2n+1)",L=q.cloneNode(true),K=b.cloneNode(true),J=g;L.appendChild(K);if((f(m,"p:nth-child(odd)",L,K)&&!f(m,G,L,K)&&e.match(/:nth-child\(\s*(?:even|odd)\s*\)/)!=null)||f(m,G,L,K)){J=a}J(e,I,F,H);return J});C.register({fingerprint:v+"nth-last-child",selector:/:nth-last-child\(\s*(?:even|odd|[+-]?\d*?|[+-]?\d*?n(?:\s*[+-]\s*\d*?)?)\s*\)/,test:function(){var F=q.cloneNode(true),e=b.cloneNode(true);F.appendChild(e);return(!f(m,"div p:nth-last-child( 2n + 1 )",F,e))}},r,function(e,I,F,H){e=p(e);var G="p:nth-last-child(2n+1)",L=q.cloneNode(true),K=b.cloneNode(true),J=g;L.appendChild(K);if((f(m,"p:nth-last-child(odd)",L,K)&&!f(m,G,L,K)&&e.match(/:nth-last-child\(\s*(?:even|odd)\s*\)/)!=null)||f(m,G,L,K)){J=a}J(e,I,F,H);return J});C.register({fingerprint:v+"nth-of-type",selector:/:nth-(?:last-)?of-type\(\s*(?:even|odd|[+-]?\d*?|[+-]?\d*?n(?:\s*[+-]\s*\d*?)?)\s*\)/,test:function(){var F=q.cloneNode(true),e=b.cloneNode(true);F.appendChild(e);return(!f(m,"div p:nth-of-type( 2n + 1 )",F,e))}},r,g);(function(){var F={"div :first-child":/:first-child/,"div :last-child":/:last-child/,"div :only-child":/:only-child/},e,H=q.cloneNode(true),G=b.cloneNode(true);H.appendChild(G);for(e in F){(function(I,J){C.register({fingerprint:v+J.toString().replace(/[\/:]/g,""),selector:J,test:function(){return !f(m,I,H,G)}},r,g)})(e,F[e])}})();(function(){var F={"div p:first-of-type":/:first-of-type/,"div p:last-of-type":/:last-of-type/,"div div:only-of-type":/:only-of-type/},e,J=q.cloneNode(true),G=q.cloneNode(true),I=b.cloneNode(true),H=b.cloneNode(true);J.appendChild(I);J.appendChild(H);J.appendChild(G);for(e in F){(function(K,L){C.register({fingerprint:v+L.toString().replace(/[\/:]/g,""),selector:L,test:function(){return !f(m,K,J,I)}},r,g)})(e,F[e])}})();(function(){var H={"div input:empty":/:empty/,"div input:disabled":/:disabled/,"div input:enabled":/:enabled/},e,F,G=0,I=q.cloneNode(true);I.innerHTML='<input type="text" disabled="disabled"/><input type="text"/>';F=I.getElementsByTagName("input");for(e in H){(function(J,L){var K=F[G];C.register({fingerprint:v+L.toString().replace(/[\/:]/g,""),selector:L,test:function(){return !f(m,J,I,K)}},r,g)})(e,H[e]);G=G==1?1:G+1}})();C.register({fingerprint:v+"lang",selector:/:lang\(.*\)/,test:function(){var F=q.cloneNode(true),e=b.cloneNode(true);e.setAttribute("lang","en");F.appendChild(e);return(!f("selector","div p:lang(en)",F,e))}},r,function(F,I,G,H){var K=g,J;try{J=h(F)}catch(L){K=function(e,O,M,N){e=e.replace(/:lang\(([^)]*)\)/,"[lang=$1]");g(e,O,M,N)}}K(F,I,G,H);return K});(function(){var F=C.makeUniqueClass(),e=/:checked/,G=function(){var H=document.getElementsByTagName("input"),I=H.length;while(I--){if(H[I].checked){C.addClass(H[I],F)}else{C.removeClass(H[I],F)}}};C.register({fingerprint:v+"checked",selector:e,test:function(){var I=q.cloneNode(true),H;I.innerHTML='<input type="checkbox" checked="checked" />';H=I.getElementsByTagName("input")[0];return !f(m,"div input:checked",I,H)}},r,function(H,K,I,J){G();y(document.body,i,function(N){var M=N.target;if(M.nodeName.toLowerCase()=="input"&&(M.getAttribute("type")=="radio"||M.getAttribute("type")=="checkbox")){G()}});function L(M,P,N,O){M=M.replace(e,z+F);a(M,P,N)}L(H,K,I,J);return L})})();C.register({selector:/:not\([^)]*\)/,test:function(){var G=q.cloneNode(true),F=b.cloneNode(true),e=b.cloneNode(true);F.setAttribute("id","no");G.appendChild(F);G.appendChild(e);return(!f(m,"div p:not(#no)",G,e))}},r,g);C.register({selector:function(){return(this.match(/\+/)&&!this.match(/:nth-(?:last-)?(?:child|of-type)\(\s*(?:even|odd|[+-]?\d*?|[+-]?\d*?n(?:\s*[+-]\s*\d*?)?)\s*\)/))},test:function(){var G=q.cloneNode(true),F=b.cloneNode(true),e=b.cloneNode(true);G.appendChild(F);G.appendChild(e);return(!f(m,"div p + p",G,e))}},r,g);C.register({selector:/~[^=]/,test:function(){var H=q.cloneNode(true),G=b.cloneNode(true),F=b.cloneNode(true),e=b.cloneNode(true);H.appendChild(G);H.appendChild(F);H.appendChild(e);return(!f(m,"div p ~ p",H,e))}},r,g)})(eCSStender);
