/* * jQuery JavaScript Library v1.3.2 * http://jquery.com/ * * Copyright (c) 2009 John Resig * Dual licensed under the MIT and GPL licenses. * http://docs.jquery.com/License * * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) * Revision: 6246 */ (function(){var window=this,undefined,_jQuery=window.jQuery,_$=window.$,jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);},quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,isSimple=/^.[^:#\[\.,]*$/;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;this.context=selector;return this;}if(typeof selector==="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1]){selector=jQuery.clean([match[1]],context);}else{var elem=document.getElementById(match[3]);if(elem&&elem.id!=match[3]){return jQuery().find(selector);}var ret=jQuery(elem||[]);ret.context=document;ret.selector=selector;return ret;}}else{return jQuery(context).find(selector);}}else{if(jQuery.isFunction(selector)){return jQuery(document).ready(selector);}}if(selector.selector&&selector.context){this.selector=selector.selector;this.context=selector.context;}return this.setArray(jQuery.isArray(selector)?selector:jQuery.makeArray(selector));},selector:"",jquery:"1.3.2",size:function(){return this.length;},get:function(num){return num===undefined?Array.prototype.slice.call(this):this[num];},pushStack:function(elems,name,selector){var ret=jQuery(elems);ret.prevObject=this;ret.context=this.context;if(name==="find"){ret.selector=this.selector+(this.selector?" ":"")+selector;}else{if(name){ret.selector=this.selector+"."+name+"("+selector+")";}}return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(typeof name==="string"){if(value===undefined){return this[0]&&jQuery[type||"attr"](this[0],name);}else{options={};options[name]=value;}}return this.each(function(i){for(name in options){jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));}});},css:function(key,value){if((key=="width"||key=="height")&&parseFloat(value)<0){value=undefined;}return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!=="object"&&text!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));}var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8){ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);}});});return ret;},wrapAll:function(html){if(this[0]){var wrap=jQuery(html,this[0].ownerDocument).clone();if(this[0].parentNode){wrap.insertBefore(this[0]);}wrap.map(function(){var elem=this;while(elem.firstChild){elem=elem.firstChild;}return elem;}).append(this);}return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,function(elem){if(this.nodeType==1){this.appendChild(elem);}});},prepend:function(){return this.domManip(arguments,true,function(elem){if(this.nodeType==1){this.insertBefore(elem,this.firstChild);}});},before:function(){return this.domManip(arguments,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},push:[].push,sort:[].sort,splice:[].splice,find:function(selector){if(this.length===1){var ret=this.pushStack([],"find",selector);ret.length=0;jQuery.find(selector,this[0],ret);return ret;}else{return this.pushStack(jQuery.unique(jQuery.map(this,function(elem){return jQuery.find(selector,elem);})),"find",selector);}},clone:function(events){var ret=this.map(function(){if(!jQuery.support.noCloneEvent&&!jQuery.isXMLDoc(this)){var html=this.outerHTML;if(!html){var div=this.ownerDocument.createElement("div");div.appendChild(this.cloneNode(true));html=div.innerHTML;}return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0];}else{return this.cloneNode(true);}});if(events===true){var orig=this.find("*").andSelf(),i=0;ret.find("*").andSelf().each(function(){if(this.nodeName!==orig[i].nodeName){return;}var events=jQuery.data(orig[i],"events");for(var type in events){for(var handler in events[type]){jQuery.event.add(this,type,events[type][handler],events[type][handler].data);}}i++;});}return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,jQuery.grep(this,function(elem){return elem.nodeType===1;})),"filter",selector);},closest:function(selector){var pos=jQuery.expr.match.POS.test(selector)?jQuery(selector):null,closer=0;return this.map(function(){var cur=this;while(cur&&cur.ownerDocument){if(pos?pos.index(cur)>-1:jQuery(cur).is(selector)){jQuery.data(cur,"closest",closer);return cur;}cur=cur.parentNode;closer++;}});},not:function(selector){if(typeof selector==="string"){if(isSimple.test(selector)){return this.pushStack(jQuery.multiFilter(selector,this,true),"not",selector);}else{selector=jQuery.multiFilter(selector,this);}}var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector==="string"?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return !!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return !!selector&&this.is("."+selector);},val:function(value){if(value===undefined){var elem=this[0];if(elem){if(jQuery.nodeName(elem,"option")){return(elem.attributes.value||{}).specified?elem.value:elem.text;}if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0){return null;}for(var i=one?index:0,max=one?index+1:options.length;i=0||jQuery.inArray(this.name,value)>=0);}else{if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length){this.selectedIndex=-1;}}else{this.value=value;}}});},html:function(value){return value===undefined?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,+i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},domManip:function(args,table,callback){if(this[0]){var fragment=(this[0].ownerDocument||this[0]).createDocumentFragment(),scripts=jQuery.clean(args,(this[0].ownerDocument||this[0]),fragment),first=fragment.firstChild;if(first){for(var i=0,l=this.length; i1||i>0?fragment.cloneNode(true):fragment);}}if(scripts){jQuery.each(scripts,evalScript);}}return this;function root(elem,cur){return table&&jQuery.nodeName(elem,"table")&&jQuery.nodeName(cur,"tr")?(elem.getElementsByTagName("tbody")[0]||elem.appendChild(elem.ownerDocument.createElement("tbody"))):elem;}}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src){jQuery.ajax({url:elem.src,async:false,dataType:"script"});}else{jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");}if(elem.parentNode){elem.parentNode.removeChild(elem);}}function now(){return +new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(typeof target==="boolean"){deep=target;target=arguments[1]||{};i=2;}if(typeof target!=="object"&&!jQuery.isFunction(target)){target={};}if(length==i){target=this;--i;}for(;i-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options){elem.style[name]=old[name];}},css:function(elem,name,force,extra){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;if(extra==="border"){return;}jQuery.each(which,function(){if(!extra){val-=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;}if(extra==="margin"){val+=parseFloat(jQuery.curCSS(elem,"margin"+this,true))||0;}else{val-=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;}});}if(elem.offsetWidth!==0){getWH();}else{jQuery.swap(elem,props,getWH);}return Math.max(0,Math.round(val));}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;if(name=="opacity"&&!jQuery.support.opacity){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(name.match(/float/i)){name=styleFloat;}if(!force&&style&&style[name]){ret=style[name];}else{if(defaultView.getComputedStyle){if(name.match(/float/i)){name="float";}name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle){ret=computedStyle.getPropertyValue(name);}if(name=="opacity"&&ret==""){ret="1";}}else{if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();});ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var left=style.left,rsLeft=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;style.left=ret||0;ret=style.pixelLeft+"px";style.left=left;elem.runtimeStyle.left=rsLeft;}}}}return ret;},clean:function(elems,context,fragment){context=context||document;if(typeof context.createElement==="undefined"){context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;}if(!fragment&&elems.length===1&&typeof elems[0]==="string"){var match=/^<(\w+)\s*\/?>$/.exec(elems[0]);if(match){return[context.createElement(match[1])];}}var ret=[],scripts=[],div=context.createElement("div");jQuery.each(elems,function(i,elem){if(typeof elem==="number"){elem+="";}if(!elem){return;}if(typeof elem==="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+">";});var tags=elem.replace(/^\s+/,"").substring(0,10).toLowerCase();var wrap=!tags.indexOf("",""]||!tags.indexOf("",""]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!tags.indexOf("",""]||(!tags.indexOf("",""]||!tags.indexOf("",""]||!jQuery.support.htmlSerialize&&[1,"div
","
"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--){div=div.lastChild;}if(!jQuery.support.tbody){var hasBody=/"&&!hasBody?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j){if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length){tbody[j].parentNode.removeChild(tbody[j]);}}}if(!jQuery.support.leadingWhitespace&&/^\s/.test(elem)){div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.nodeType){ret.push(elem);}else{ret=jQuery.merge(ret,elem);}});if(fragment){for(var i=0;ret[i];i++){if(jQuery.nodeName(ret[i],"script")&&(!ret[i].type||ret[i].type.toLowerCase()==="text/javascript")){scripts.push(ret[i].parentNode?ret[i].parentNode.removeChild(ret[i]):ret[i]);}else{if(ret[i].nodeType===1){ret.splice.apply(ret,[i+1,0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))));}fragment.appendChild(ret[i]);}}return scripts;}return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8){return undefined;}var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&elem.parentNode){elem.parentNode.selectedIndex; }if(name in elem&¬xml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode){throw"type property can't be changed";}elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name)){return elem.getAttributeNode(name).nodeValue;}if(name=="tabIndex"){var attributeNode=elem.getAttributeNode("tabIndex");return attributeNode&&attributeNode.specified?attributeNode.value:elem.nodeName.match(/(button|input|object|select|textarea)/i)?0:elem.nodeName.match(/^(a|area)$/i)&&elem.href?0:undefined;}return elem[name];}if(!jQuery.support.style&¬xml&&name=="style"){return jQuery.attr(elem.style,"cssText",value);}if(set){elem.setAttribute(name,""+value);}var attr=!jQuery.support.hrefNormalized&¬xml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(!jQuery.support.opacity&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+""=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+"":"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set){elem[name]=value;}return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||typeof array==="string"||jQuery.isFunction(array)||array.setInterval){ret[0]=array;}else{while(i){ret[--i]=array[i];}}}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i0?this.clone(true):this).get();jQuery.fn[original].apply(jQuery(insert[i]),elems);ret=ret.concat(elems);}return this.pushStack(ret,name,selector);};});jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");if(this.nodeType==1){this.removeAttribute(name);}},addClass:function(classNames){jQuery.className.add(this,classNames);},removeClass:function(classNames){jQuery.className.remove(this,classNames);},toggleClass:function(classNames,state){if(typeof state!=="boolean"){state=!jQuery.className.has(this,classNames);}jQuery.className[state?"add":"remove"](this,classNames);},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).length){jQuery("*",this).add([this]).each(function(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.parentNode){this.parentNode.removeChild(this);}}},empty:function(){jQuery(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild);}}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var expando="jQuery"+now(),uuid=0,windowData={};jQuery.extend({cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id){id=elem[expando]=++uuid;}if(name&&!jQuery.cache[id]){jQuery.cache[id]={};}if(data!==undefined){jQuery.cache[id][name]=data;}return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?windowData:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id]){break;}if(!name){jQuery.removeData(elem);}}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute){elem.removeAttribute(expando);}}delete jQuery.cache[id];}},queue:function(elem,type,data){if(elem){type=(type||"fx")+"queue";var q=jQuery.data(elem,type);if(!q||jQuery.isArray(data)){q=jQuery.data(elem,type,jQuery.makeArray(data));}else{if(data){q.push(data);}}}return q;},dequeue:function(elem,type){var queue=jQuery.queue(elem,type),fn=queue.shift();if(!type||type==="fx"){fn=queue[0];}if(fn!==undefined){fn.call(elem);}}});jQuery.fn.extend({data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length){data=jQuery.data(this[0],key);}return data===undefined&&parts[1]?this.data(parts[0]):data;}else{return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});}},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},queue:function(type,data){if(typeof type!=="string"){data=type;type="fx";}if(data===undefined){return jQuery.queue(this[0],type);}return this.each(function(){var queue=jQuery.queue(this,type,data);if(type=="fx"&&queue.length==1){queue[0].call(this);}});},dequeue:function(type){return this.each(function(){jQuery.dequeue(this,type);});}}); /* * Sizzle CSS Selector Engine - v0.9.3 * Copyright 2009, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * More information: http://sizzlejs.com/ */ (function(){var chunker=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,done=0,toString=Object.prototype.toString;var Sizzle=function(selector,context,results,seed){results=results||[];context=context||document;if(context.nodeType!==1&&context.nodeType!==9){return[];}if(!selector||typeof selector!=="string"){return results;}var parts=[],m,set,checkSet,check,mode,extra,prune=true;chunker.lastIndex=0;while((m=chunker.exec(selector))!==null){parts.push(m[1]);if(m[2]){extra=RegExp.rightContext;break;}}if(parts.length>1&&origPOS.exec(selector)){if(parts.length===2&&Expr.relative[parts[0]]){set=posProcess(parts[0]+parts[1],context);}else{set=Expr.relative[parts[0]]?[context]:Sizzle(parts.shift(),context);while(parts.length){selector=parts.shift();if(Expr.relative[selector]){selector+=parts.shift();}set=posProcess(selector,set); }}}else{var ret=seed?{expr:parts.pop(),set:makeArray(seed)}:Sizzle.find(parts.pop(),parts.length===1&&context.parentNode?context.parentNode:context,isXML(context));set=Sizzle.filter(ret.expr,ret.set);if(parts.length>0){checkSet=makeArray(set);}else{prune=false;}while(parts.length){var cur=parts.pop(),pop=cur;if(!Expr.relative[cur]){cur="";}else{pop=parts.pop();}if(pop==null){pop=context;}Expr.relative[cur](checkSet,pop,isXML(context));}}if(!checkSet){checkSet=set;}if(!checkSet){throw"Syntax error, unrecognized expression: "+(cur||selector);}if(toString.call(checkSet)==="[object Array]"){if(!prune){results.push.apply(results,checkSet);}else{if(context.nodeType===1){for(var i=0;checkSet[i]!=null;i++){if(checkSet[i]&&(checkSet[i]===true||checkSet[i].nodeType===1&&contains(context,checkSet[i]))){results.push(set[i]);}}}else{for(var i=0;checkSet[i]!=null;i++){if(checkSet[i]&&checkSet[i].nodeType===1){results.push(set[i]);}}}}}else{makeArray(checkSet,results);}if(extra){Sizzle(extra,context,results,seed);if(sortOrder){hasDuplicate=false;results.sort(sortOrder);if(hasDuplicate){for(var i=1;i":function(checkSet,part,isXML){var isPartStr=typeof part==="string";if(isPartStr&&!/\W/.test(part)){part=isXML?part:part.toUpperCase();for(var i=0,l=checkSet.length;i=0)){if(!inplace){result.push(elem);}}else{if(inplace){curLoop[i]=false;}}}}return false;},ID:function(match){return match[1].replace(/\\/g,"");},TAG:function(match,curLoop){for(var i=0;curLoop[i]===false;i++){}return curLoop[i]&&isXML(curLoop[i])?match[1]:match[1].toUpperCase();},CHILD:function(match){if(match[1]=="nth"){var test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(match[2]=="even"&&"2n"||match[2]=="odd"&&"2n+1"||!/\D/.test(match[2])&&"0n+"+match[2]||match[2]);match[2]=(test[1]+(test[2]||1))-0;match[3]=test[3]-0;}match[0]=done++;return match;},ATTR:function(match,curLoop,inplace,result,not,isXML){var name=match[1].replace(/\\/g,"");if(!isXML&&Expr.attrMap[name]){match[1]=Expr.attrMap[name];}if(match[2]==="~="){match[4]=" "+match[4]+" ";}return match;},PSEUDO:function(match,curLoop,inplace,result,not){if(match[1]==="not"){if(match[3].match(chunker).length>1||/^\w/.test(match[3])){match[3]=Sizzle(match[3],null,null,curLoop);}else{var ret=Sizzle.filter(match[3],curLoop,inplace,true^not);if(!inplace){result.push.apply(result,ret);}return false;}}else{if(Expr.match.POS.test(match[0])||Expr.match.CHILD.test(match[0])){return true;}}return match;},POS:function(match){match.unshift(true);return match;}},filters:{enabled:function(elem){return elem.disabled===false&&elem.type!=="hidden";},disabled:function(elem){return elem.disabled===true;},checked:function(elem){return elem.checked===true;},selected:function(elem){elem.parentNode.selectedIndex;return elem.selected===true;},parent:function(elem){return !!elem.firstChild;},empty:function(elem){return !elem.firstChild;},has:function(elem,i,match){return !!Sizzle(match[3],elem).length;},header:function(elem){return/h\d/i.test(elem.nodeName);},text:function(elem){return"text"===elem.type;},radio:function(elem){return"radio"===elem.type;},checkbox:function(elem){return"checkbox"===elem.type;},file:function(elem){return"file"===elem.type;},password:function(elem){return"password"===elem.type;},submit:function(elem){return"submit"===elem.type;},image:function(elem){return"image"===elem.type;},reset:function(elem){return"reset"===elem.type;},button:function(elem){return"button"===elem.type||elem.nodeName.toUpperCase()==="BUTTON";},input:function(elem){return/input|select|textarea|button/i.test(elem.nodeName);}},setFilters:{first:function(elem,i){return i===0;},last:function(elem,i,match,array){return i===array.length-1;},even:function(elem,i){return i%2===0;},odd:function(elem,i){return i%2===1;},lt:function(elem,i,match){return imatch[3]-0;},nth:function(elem,i,match){return match[3]-0==i;},eq:function(elem,i,match){return match[3]-0==i;}},filter:{PSEUDO:function(elem,match,i,array){var name=match[1],filter=Expr.filters[name];if(filter){return filter(elem,i,match,array);}else{if(name==="contains"){return(elem.textContent||elem.innerText||"").indexOf(match[3])>=0;}else{if(name==="not"){var not=match[3];for(var i=0,l=not.length;i=0);}}},ID:function(elem,match){return elem.nodeType===1&&elem.getAttribute("id")===match;},TAG:function(elem,match){return(match==="*"&&elem.nodeType===1)||elem.nodeName===match;},CLASS:function(elem,match){return(" "+(elem.className||elem.getAttribute("class"))+" ").indexOf(match)>-1;},ATTR:function(elem,match){var name=match[1],result=Expr.attrHandle[name]?Expr.attrHandle[name](elem):elem[name]!=null?elem[name]:elem.getAttribute(name),value=result+"",type=match[2],check=match[4];return result==null?type==="!=":type==="="?value===check:type==="*="?value.indexOf(check)>=0:type==="~="?(" "+value+" ").indexOf(check)>=0:!check?value&&result!==false:type==="!="?value!=check:type==="^="?value.indexOf(check)===0:type==="$="?value.substr(value.length-check.length)===check:type==="|="?value===check||value.substr(0,check.length+1)===check+"-":false;},POS:function(elem,match,i,array){var name=match[2],filter=Expr.setFilters[name];if(filter){return filter(elem,i,match,array);}}}};var origPOS=Expr.match.POS;for(var type in Expr.match){Expr.match[type]=RegExp(Expr.match[type].source+/(?![^\[]*\])(?![^\(]*\))/.source);}var makeArray=function(array,results){array=Array.prototype.slice.call(array);if(results){results.push.apply(results,array);return results;}return array;};try{Array.prototype.slice.call(document.documentElement.childNodes);}catch(e){makeArray=function(array,results){var ret=results||[];if(toString.call(array)==="[object Array]"){Array.prototype.push.apply(ret,array);}else{if(typeof array.length==="number"){for(var i=0,l=array.length;i";var root=document.documentElement;root.insertBefore(form,root.firstChild);if(!!document.getElementById(id)){Expr.find.ID=function(match,context,isXML){if(typeof context.getElementById!=="undefined"&&!isXML){var m=context.getElementById(match[1]);return m?m.id===match[1]||typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id").nodeValue===match[1]?[m]:undefined:[];}};Expr.filter.ID=function(elem,match){var node=typeof elem.getAttributeNode!=="undefined"&&elem.getAttributeNode("id");return elem.nodeType===1&&node&&node.nodeValue===match;};}root.removeChild(form);})();(function(){var div=document.createElement("div");div.appendChild(document.createComment(""));if(div.getElementsByTagName("*").length>0){Expr.find.TAG=function(match,context){var results=context.getElementsByTagName(match[1]);if(match[1]==="*"){var tmp=[];for(var i=0;results[i];i++){if(results[i].nodeType===1){tmp.push(results[i]);}}results=tmp;}return results;};}div.innerHTML="";if(div.firstChild&&typeof div.firstChild.getAttribute!=="undefined"&&div.firstChild.getAttribute("href")!=="#"){Expr.attrHandle.href=function(elem){return elem.getAttribute("href",2);};}})();if(document.querySelectorAll){(function(){var oldSizzle=Sizzle,div=document.createElement("div");div.innerHTML="

";if(div.querySelectorAll&&div.querySelectorAll(".TEST").length===0){return;}Sizzle=function(query,context,extra,seed){context=context||document;if(!seed&&context.nodeType===9&&!isXML(context)){try{return makeArray(context.querySelectorAll(query),extra);}catch(e){}}return oldSizzle(query,context,extra,seed);};Sizzle.find=oldSizzle.find;Sizzle.filter=oldSizzle.filter;Sizzle.selectors=oldSizzle.selectors;Sizzle.matches=oldSizzle.matches;})();}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var div=document.createElement("div");div.innerHTML="
";if(div.getElementsByClassName("e").length===0){return;}div.lastChild.className="e";if(div.getElementsByClassName("e").length===1){return;}Expr.order.splice(1,0,"CLASS");Expr.find.CLASS=function(match,context,isXML){if(typeof context.getElementsByClassName!=="undefined"&&!isXML){return context.getElementsByClassName(match[1]);}};})();}function dirNodeCheck(dir,cur,doneName,checkSet,nodeCheck,isXML){var sibDir=dir=="previousSibling"&&!isXML;for(var i=0,l=checkSet.length;i0){match=elem;break;}}}elem=elem[dir];}checkSet[i]=match;}}}var contains=document.compareDocumentPosition?function(a,b){return a.compareDocumentPosition(b)&16;}:function(a,b){return a!==b&&(a.contains?a.contains(b):true);};var isXML=function(elem){return elem.nodeType===9&&elem.documentElement.nodeName!=="HTML"||!!elem.ownerDocument&&isXML(elem.ownerDocument);};var posProcess=function(selector,context){var tmpSet=[],later="",match,root=context.nodeType?[context]:context;while((match=Expr.match.PSEUDO.exec(selector))){later+=match[0];selector=selector.replace(Expr.match.PSEUDO,"");}selector=Expr.relative[selector]?selector+"*":selector;for(var i=0,l=root.length;i0||elem.offsetHeight>0; };Sizzle.selectors.filters.animated=function(elem){return jQuery.grep(jQuery.timers,function(fn){return elem===fn.elem;}).length;};jQuery.multiFilter=function(expr,elems,not){if(not){expr=":not("+expr+")";}return Sizzle.matches(expr,elems);};jQuery.dir=function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1){matched.push(cur);}cur=cur[dir];}return matched;};jQuery.nth=function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir]){if(cur.nodeType==1&&++num==result){break;}}return cur;};jQuery.sibling=function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem){r.push(n);}}return r;};return;window.Sizzle=Sizzle;})();jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8){return;}if(elem.setInterval&&elem!=window){elem=window;}if(!handler.guid){handler.guid=this.guid++;}if(data!==undefined){var fn=handler;handler=this.proxy(fn);handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){return typeof jQuery!=="undefined"&&!jQuery.event.triggered?jQuery.event.handle.apply(arguments.callee.elem,arguments):undefined;});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var namespaces=type.split(".");type=namespaces.shift();handler.type=namespaces.slice().sort().join(".");var handlers=events[type];if(jQuery.event.specialAll[type]){jQuery.event.specialAll[type].setup.call(elem,data,namespaces);}if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem,data,namespaces)===false){if(elem.addEventListener){elem.addEventListener(type,handle,false);}else{if(elem.attachEvent){elem.attachEvent("on"+type,handle);}}}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8){return;}var events=jQuery.data(elem,"events"),ret,index;if(events){if(types===undefined||(typeof types==="string"&&types.charAt(0)==".")){for(var type in events){this.remove(elem,type+(types||""));}}else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var namespaces=type.split(".");type=namespaces.shift();var namespace=RegExp("(^|\\.)"+namespaces.slice().sort().join(".*\\.")+"(\\.|$)");if(events[type]){if(handler){delete events[type][handler.guid];}else{for(var handle in events[type]){if(namespace.test(events[type][handle].type)){delete events[type][handle];}}}if(jQuery.event.specialAll[type]){jQuery.event.specialAll[type].teardown.call(elem,namespaces);}for(ret in events[type]){break;}if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem,namespaces)===false){if(elem.removeEventListener){elem.removeEventListener(type,jQuery.data(elem,"handle"),false);}else{if(elem.detachEvent){elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}}}ret=null;delete events[type];}}});}for(ret in events){break;}if(!ret){var handle=jQuery.data(elem,"handle");if(handle){handle.elem=null;}jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(event,data,elem,bubbling){var type=event.type||event;if(!bubbling){event=typeof event==="object"?event[expando]?event:jQuery.extend(jQuery.Event(type),event):jQuery.Event(type);if(type.indexOf("!")>=0){event.type=type=type.slice(0,-1);event.exclusive=true;}if(!elem){event.stopPropagation();if(this.global[type]){jQuery.each(jQuery.cache,function(){if(this.events&&this.events[type]){jQuery.event.trigger(event,data,this.handle.elem);}});}}if(!elem||elem.nodeType==3||elem.nodeType==8){return undefined;}event.result=undefined;event.target=elem;data=jQuery.makeArray(data);data.unshift(event);}event.currentTarget=elem;var handle=jQuery.data(elem,"handle");if(handle){handle.apply(elem,data);}if((!elem[type]||(jQuery.nodeName(elem,"a")&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false){event.result=false;}if(!bubbling&&elem[type]&&!event.isDefaultPrevented()&&!(jQuery.nodeName(elem,"a")&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;if(!event.isPropagationStopped()){var parent=elem.parentNode||elem.ownerDocument;if(parent){jQuery.event.trigger(event,data,parent,true);}}},handle:function(event){var all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);event.currentTarget=this;var namespaces=event.type.split(".");event.type=namespaces.shift();all=!namespaces.length&&!event.exclusive;var namespace=RegExp("(^|\\.)"+namespaces.slice().sort().join(".*\\.")+"(\\.|$)");handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||namespace.test(handler.type)){event.handler=handler;event.data=handler.data;var ret=handler.apply(this,arguments);if(ret!==undefined){event.result=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}if(event.isImmediatePropagationStopped()){break;}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(event){if(event[expando]){return event;}var originalEvent=event;event=jQuery.Event(originalEvent);for(var i=this.props.length,prop;i;){prop=this.props[--i];event[prop]=originalEvent[prop];}if(!event.target){event.target=event.srcElement||document;}if(event.target.nodeType==3){event.target=event.target.parentNode;}if(!event.relatedTarget&&event.fromElement){event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;}if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode)){event.which=event.charCode||event.keyCode;}if(!event.metaKey&&event.ctrlKey){event.metaKey=event.ctrlKey;}if(!event.which&&event.button){event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));}return event;},proxy:function(fn,proxy){proxy=proxy||function(){return fn.apply(this,arguments);};proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:bindReady,teardown:function(){}}},specialAll:{live:{setup:function(selector,namespaces){jQuery.event.add(this,namespaces[0],liveHandler);},teardown:function(namespaces){if(namespaces.length){var remove=0,name=RegExp("(^|\\.)"+namespaces[0]+"(\\.|$)");jQuery.each((jQuery.data(this,"events").live||{}),function(){if(name.test(this.type)){remove++;}});if(remove<1){jQuery.event.remove(this,namespaces[0],liveHandler);}}}}}};jQuery.Event=function(src){if(!this.preventDefault){return new jQuery.Event(src);}if(src&&src.type){this.originalEvent=src;this.type=src.type;}else{this.type=src;}this.timeStamp=now();this[expando]=true;};function returnFalse(){return false;}function returnTrue(){return true;}jQuery.Event.prototype={preventDefault:function(){this.isDefaultPrevented=returnTrue;var e=this.originalEvent;if(!e){return;}if(e.preventDefault){e.preventDefault();}e.returnValue=false;},stopPropagation:function(){this.isPropagationStopped=returnTrue;var e=this.originalEvent;if(!e){return;}if(e.stopPropagation){e.stopPropagation();}e.cancelBubble=true;},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=returnTrue;this.stopPropagation();},isDefaultPrevented:returnFalse,isPropagationStopped:returnFalse,isImmediatePropagationStopped:returnFalse};var withinElement=function(event){var parent=event.relatedTarget;while(parent&&parent!=this){try{parent=parent.parentNode; }catch(e){parent=this;}}if(parent!=this){event.type=event.data;jQuery.event.handle.apply(this,arguments);}};jQuery.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(orig,fix){jQuery.event.special[fix]={setup:function(){jQuery.event.add(this,orig,withinElement,fix);},teardown:function(){jQuery.event.remove(this,orig,withinElement);}};});jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data){return this.each(function(){jQuery.event.trigger(type,data,this);});},triggerHandler:function(type,data){if(this[0]){var event=jQuery.Event(type);event.preventDefault();event.stopPropagation();jQuery.event.trigger(event,data,this[0]);return event.result;}},toggle:function(fn){var args=arguments,i=1;while(i=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}var type="GET";if(params){if(jQuery.isFunction(params)){callback=params;params=null;}else{if(typeof params==="object"){params=jQuery.param(params);type="POST";}}}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified"){self.html(selector?jQuery("
").append(res.responseText.replace(//g,"")).find(selector):res.responseText);}if(callback){self.each(callback,[res.responseText,status,res]);}}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return this.elements?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:jQuery.isArray(val)?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest(); },accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!=="string"){s.data=jQuery.param(s.data);}if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre)){s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}}else{if(!s.data||!s.data.match(jsre)){s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";}}s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data){s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");}s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head){head.removeChild(script);}};}if(s.dataType=="script"&&s.cache==null){s.cache=false;}if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++){jQuery.event.trigger("ajaxStart");}var parts=/^(\w+:)?\/\/([^\/?#]+)/.exec(s.url);if(s.dataType=="script"&&type=="GET"&&parts&&(parts[1]&&parts[1]!=location.protocol||parts[2]!=location.host)){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset){script.charset=s.scriptCharset;}if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();script.onload=script.onreadystatechange=null;head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=s.xhr();if(s.username){xhr.open(type,s.url,s.async,s.username,s.password);}else{xhr.open(type,s.url,s.async);}try{if(s.data){xhr.setRequestHeader("Content-Type",s.contentType);}if(s.ifModified){xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");}xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){if(s.global&&!--jQuery.active){jQuery.event.trigger("ajaxStop");}xhr.abort();return false;}if(s.global){jQuery.event.trigger("ajaxSend",[xhr,s]);}var onreadystatechange=function(isTimeout){if(xhr.readyState==0){if(ival){clearInterval(ival);ival=null;if(s.global&&!--jQuery.active){jQuery.event.trigger("ajaxStop");}}}else{if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"?"timeout":!jQuery.httpSuccess(xhr)?"error":s.ifModified&&jQuery.httpNotModified(xhr,s.url)?"notmodified":"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes){jQuery.lastModified[s.url]=modRes;}if(!jsonp){success();}}else{jQuery.handleError(s,xhr,status);}complete();if(isTimeout){xhr.abort();}if(s.async){xhr=null;}}}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0){setTimeout(function(){if(xhr&&!requestDone){onreadystatechange("timeout");}},s.timeout);}}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async){onreadystatechange();}function success(){if(s.success){s.success(data,status);}if(s.global){jQuery.event.trigger("ajaxSuccess",[xhr,s]);}}function complete(){if(s.complete){s.complete(xhr,status);}if(s.global){jQuery.event.trigger("ajaxComplete",[xhr,s]);}if(s.global&&!--jQuery.active){jQuery.event.trigger("ajaxStop");}}return xhr;},handleError:function(s,xhr,status,e){if(s.error){s.error(xhr,status,e);}if(s.global){jQuery.event.trigger("ajaxError",[xhr,s,e]);}},active:0,httpSuccess:function(xhr){try{return !xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url];}catch(e){}return false;},httpData:function(xhr,type,s){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror"){throw"parsererror";}if(s&&s.dataFilter){data=s.dataFilter(data,type);}if(typeof data==="string"){if(type=="script"){jQuery.globalEval(data);}if(type=="json"){data=window["eval"]("("+data+")");}}return data;},param:function(a){var s=[];function add(key,value){s[s.length]=encodeURIComponent(key)+"="+encodeURIComponent(value);}if(jQuery.isArray(a)||a.jquery){jQuery.each(a,function(){add(this.name,this.value);});}else{for(var j in a){if(jQuery.isArray(a[j])){jQuery.each(a[j],function(){add(j,this);});}else{add(j,jQuery.isFunction(a[j])?a[j]():a[j]);}}}return s.join("&").replace(/%20/g,"+");}});var elemdisplay={},timerId,fxAttrs=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function genFx(type,num){var obj={};jQuery.each(fxAttrs.concat.apply([],fxAttrs.slice(0,num)),function(){obj[this]=type;});return obj;}jQuery.fn.extend({show:function(speed,callback){if(speed){return this.animate(genFx("show",3),speed,callback);}else{for(var i=0,l=this.length;i").appendTo("body");display=elem.css("display");if(display==="none"){display="block";}elem.remove();elemdisplay[tagName]=display;}jQuery.data(this[i],"olddisplay",display);}}for(var i=0,l=this.length;i=0;i--){if(timers[i].elem==this){if(gotoEnd){timers[i](true);}timers.splice(i,1);}}});if(!gotoEnd){this.dequeue();}return this;}});jQuery.each({slideDown:genFx("show",1),slideUp:genFx("hide",1),slideToggle:genFx("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(name,props){jQuery.fn[name]=function(speed,callback){return this.animate(props,speed,callback);};});jQuery.extend({speed:function(speed,easing,fn){var opt=typeof speed==="object"?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&!jQuery.isFunction(easing)&&easing};opt.duration=jQuery.fx.off?0:typeof opt.duration==="number"?opt.duration:jQuery.fx.speeds[opt.duration]||jQuery.fx.speeds._default;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false){jQuery(this).dequeue();}if(jQuery.isFunction(opt.old)){opt.old.call(this);}};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig){options.orig={};}}});jQuery.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this);}(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block";}},cur:function(force){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop];}var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;if(t()&&jQuery.timers.push(t)&&!timerId){timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;i=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim){if(this.options.curAnim[i]!==true){done=false;}}if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none"){this.elem.style.display="block";}}if(this.options.hide){jQuery(this.elem).hide();}if(this.options.hide||this.options.show){for(var p in this.options.curAnim){jQuery.attr(this.elem.style,p,this.options.orig[p]);}}this.options.complete.call(this.elem);}return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){if(fx.elem.style&&fx.elem.style[fx.prop]!=null){fx.elem.style[fx.prop]=fx.now+fx.unit;}else{fx.elem[fx.prop]=fx.now;}}}});if(document.documentElement["getBoundingClientRect"]){jQuery.fn.offset=function(){if(!this[0]){return{top:0,left:0};}if(this[0]===this[0].ownerDocument.body){return jQuery.offset.bodyOffset(this[0]);}var box=this[0].getBoundingClientRect(),doc=this[0].ownerDocument,body=doc.body,docElem=doc.documentElement,clientTop=docElem.clientTop||body.clientTop||0,clientLeft=docElem.clientLeft||body.clientLeft||0,top=box.top+(self.pageYOffset||jQuery.boxModel&&docElem.scrollTop||body.scrollTop)-clientTop,left=box.left+(self.pageXOffset||jQuery.boxModel&&docElem.scrollLeft||body.scrollLeft)-clientLeft;return{top:top,left:left};};}else{jQuery.fn.offset=function(){if(!this[0]){return{top:0,left:0};}if(this[0]===this[0].ownerDocument.body){return jQuery.offset.bodyOffset(this[0]);}jQuery.offset.initialized||jQuery.offset.initialize();var elem=this[0],offsetParent=elem.offsetParent,prevOffsetParent=elem,doc=elem.ownerDocument,computedStyle,docElem=doc.documentElement,body=doc.body,defaultView=doc.defaultView,prevComputedStyle=defaultView.getComputedStyle(elem,null),top=elem.offsetTop,left=elem.offsetLeft;while((elem=elem.parentNode)&&elem!==body&&elem!==docElem){computedStyle=defaultView.getComputedStyle(elem,null);top-=elem.scrollTop,left-=elem.scrollLeft;if(elem===offsetParent){top+=elem.offsetTop,left+=elem.offsetLeft;if(jQuery.offset.doesNotAddBorder&&!(jQuery.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(elem.tagName))){top+=parseInt(computedStyle.borderTopWidth,10)||0,left+=parseInt(computedStyle.borderLeftWidth,10)||0;}prevOffsetParent=offsetParent,offsetParent=elem.offsetParent;}if(jQuery.offset.subtractsBorderForOverflowNotVisible&&computedStyle.overflow!=="visible"){top+=parseInt(computedStyle.borderTopWidth,10)||0,left+=parseInt(computedStyle.borderLeftWidth,10)||0;}prevComputedStyle=computedStyle;}if(prevComputedStyle.position==="relative"||prevComputedStyle.position==="static"){top+=body.offsetTop,left+=body.offsetLeft;}if(prevComputedStyle.position==="fixed"){top+=Math.max(docElem.scrollTop,body.scrollTop),left+=Math.max(docElem.scrollLeft,body.scrollLeft);}return{top:top,left:left};};}jQuery.offset={initialize:function(){if(this.initialized){return;}var body=document.body,container=document.createElement("div"),innerDiv,checkDiv,table,td,rules,prop,bodyMarginTop=body.style.marginTop,html='
';rules={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(prop in rules){container.style[prop]=rules[prop];}container.innerHTML=html;body.insertBefore(container,body.firstChild);innerDiv=container.firstChild,checkDiv=innerDiv.firstChild,td=innerDiv.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(checkDiv.offsetTop!==5);this.doesAddBorderForTableAndCells=(td.offsetTop===5);innerDiv.style.overflow="hidden",innerDiv.style.position="relative";this.subtractsBorderForOverflowNotVisible=(checkDiv.offsetTop===-5);body.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(body.offsetTop===0);body.style.marginTop=bodyMarginTop;body.removeChild(container);this.initialized=true;},bodyOffset:function(body){jQuery.offset.initialized||jQuery.offset.initialize();var top=body.offsetTop,left=body.offsetLeft;if(jQuery.offset.doesNotIncludeMarginInBodyOffset){top+=parseInt(jQuery.curCSS(body,"marginTop",true),10)||0,left+=parseInt(jQuery.curCSS(body,"marginLeft",true),10)||0;}return{top:top,left:left};}};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset(); offset.top-=num(this,"marginTop");offset.left-=num(this,"marginLeft");parentOffset.top+=num(offsetParent,"borderTopWidth");parentOffset.left+=num(offsetParent,"borderLeftWidth");results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent||document.body;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,"position")=="static")){offsetParent=offsetParent.offsetParent;}return jQuery(offsetParent);}});jQuery.each(["Left","Top"],function(i,name){var method="scroll"+name;jQuery.fn[method]=function(val){if(!this[0]){return null;}return val!==undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?"pageYOffset":"pageXOffset"]||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom",lower=name.toLowerCase();jQuery.fn["inner"+name]=function(){return this[0]?jQuery.css(this[0],lower,false,"padding"):null;};jQuery.fn["outer"+name]=function(margin){return this[0]?jQuery.css(this[0],lower,false,margin?"margin":"border"):null;};var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(document.documentElement["client"+name],document.body["scroll"+name],document.documentElement["scroll"+name],document.body["offset"+name],document.documentElement["offset"+name]):size===undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,typeof size==="string"?size:size+"px");};});})(); /* * Inline Form Validation Engine 1.4, jQuery plugin * * Copyright(c) 2009, Cedric Dugas * http://www.position-relative.net * * Form validation engine which allow custom regex rules to be added. * Licenced under the MIT Licence */ (function($) { $.fn.validationEngine = function(settings) { if($.validationEngineLanguage){ // IS THERE A LANGUAGE LOCALISATION ? allRules = $.validationEngineLanguage.allRules }else{ allRules = {"required":{ // Add your regex rules here, you can take telephone as an example "regex":"none", "alertText":"* To pole jest obowi\u0105zkowe."}, "tytul":{ "regex":/^[^\t][0-9a-zA-Z ąćęłńóśźżĄĆĘŁŃÓŚŹŻ\-\.,"]+$/, "alertText":"* Tytu\u0142 mo\u017ce zawiera\u0107 wy\u0142acznie litery, cyfry i spacje oraz znaki minusa, cudzysłowia, kropki i przecinka."}, "dodatkowe":{ "regex":/^[^_puste]+$/, "alertText":"Wpisz warto\u015b\u0107, albo usu\u0144 wiersz klikaj\u0105c usu\u0144."}, "selectAdres":{ "regex":/^[a-zA-Z ąćęłńóśźżĄĆĘŁŃÓŚŹŻ\-.]+$/, "alertText":"* Wybierz adres z listy bad\u017a wprowad\u017a nowy wybieraj\u0105c opcj\u0119 Inny. Pole mo\u017ce zawiera\u0107 wy\u0142acznie litery, znaki spacji, kropki oraz minusa."}, "email":{ "regex":/^[a-zA-Z0-9_\.\-]+@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,4}$/, "alertText":"* Niepoprawny adres e-mail."}, "data":{ "regex":/^[0-9]{2}\-[0-9]{2}\-[0-9]{4}$/, "alertText":"* Niepoprwany format daty. Data powina by\u0107 podana w formacie DD-MM-YYYY (np. 21-12-2010)."}, "tagi":{ "regex":/^[^_][A-Za-z0-9_ąćęłńóśźżĄĆĘŁŃÓŚŹŻ\- ,]*[^,]$/, "alertText":"Tag musi zaczyna\u0107 si\u0119 liter\u0105 b\u0105d\u017a cyfr\u0105. Znak przecinka rozdziela tagi. Pole mo\u017ce zawiera\u0107 znaki spacji, podkre\u015blenia oraz minusa."}, "kolejne":{ "regex":/^[^\t][0-9a-zA-Z ąćęłńóśźżĄĆĘŁŃÓŚŹŻ\-\.,'"?]+$/, "alertText":"Pole mo\u017ce zawiera\u0107 wy\u0142acznie litery, cyfry i spacje oraz znaki minusa, cudzysłowia, kropki, pytajnika, apostrofa i przecinka."}, "godzina":{ "regex":/^[0-9]{2}:[0-9]{2}$/, "alertText":"Godzina powinna by\u0107 podana w formacie HH:MM (np. 12:30)."}, "length":{ "regex":"none", "alertText":"* Nieprawid\u0142owa ilo\u015b\u0107 wprowadzonych znaków. Dozwolone od ", "alertText2":" do ", "alertText3": " znaków" }, "properURL_http_s_ftp":{ "regex":/^(ftp|http|https):\/\/(([a-zA-Z0-9_-]+\.){1,})\w{2,}?(\/|\/([\w#!:.?+=&%@!\-\/])+)*$/i, "alertText":"Wprowad\u017a adres URL w poprawnym formacie (np: http://..., ftp://...)." }, "confirm":{ "regex":"none", "alertText":"* Wpisane has\u0142a nie s\u0105 jednakowe." }, "fname":{ "regex":/^[^\t][a-zA-Z ąćęłńóśźżĄĆĘŁŃÓŚŹŻ\-\.]+$/, "alertText":"* Imię mo\u017ce zawiera\u0107 wy\u0142\u0105cznie litery oraz znaki spacji, kropki i minusa." }, "lname":{ "regex":/^[^\t][a-zA-Z ąćęłńóśźżĄĆĘŁŃÓŚŹŻ\-\.]+$/, "alertText":"* Nazwisko mo\u017ce zawiera\u0107 wy\u0142\u0105cznie litery oraz znaki spacji, kropki i minusa." }, "tresc":{ "regex":/^[^\t][0-9a-zA-Z ąćęłńóśźżĄĆĘŁŃÓŚŹŻ\-\_.,'"?!]+$/, "alertText":"* Pole Opis mo\u017ce zawiera\u0107 wy\u0142acznie litery, cyfry, znaki spacji, minusa, cudzysłowia, apostrofu, pytajnika, wykrzyknika, kropki i przecinka." }, "nazwaGrupy":{ "regex":/^[^\t][0-9a-zA-Z ąćęłńóśźżĄĆĘŁŃÓŚŹŻ\-\.,'"]+$/, "alertText":"* Nazwa mo\u017ce zawiera\u0107 wy\u0142\u0105cznie litery, cyfry, znaki spacji, minusa, cudzysłowia, apostrofu, kropki i przecinka." }, "userid":{ "regex":/^[^\t][a-zA-Z0-9\-\_\.]+$/, "alertText":"* Nazwa u\u017cytkownika mo\u017ce zawiera\u0107 wy\u0142\u0105cznie litery, cyfry, znak podkre\u015blenia, kropk\u0119 oraz znak minusa. Nie mo\u017ce zawiera\u0107 polskich znaków." }, "telefon":{ "regex":/^[0-9()_\*\+\.-]*$/, "alertText":"* Numer telefonu mo\u017ce zawiera\u0107 tylko cyfry oraz znaki nawiasów okrągłych, gwiazdki, kropki, plusa i minusa." }, "cyfry":{ "regex":/^[0-9]*$/, "alertText":"* Pole mo\u017ce zawiera\u0107 tylko cyfry." }, "podstawoweznaki":{ "regex":/^[0-9a-zA-Z_@\+\.-]*$/, "alertText":"* Pole mo\u017ce zawiera\u0107 tylko litery, cyfry oraz znaki minusa, plusa, kropki, małpy i podkreślenia." } } } settings = jQuery.extend({ allrules:allRules, inlineValidation: true, ajaxSubmit: false, promptPosition: "centerRight", // OPENNING BOX POSITION, IMPLEMENTED: topLeft, topRight, bottomLeft, centerRight, bottomRight success : false, failure : function() {} }, settings); $.validationEngine.ajaxValidArray = new Array() // ARRAY FOR AJAX: VALIDATION MEMORY $(this).bind("submit", function(caller){ // ON FORM SUBMIT, CONTROL AJAX FUNCTION IF SPECIFIED ON DOCUMENT READY $.validationEngine.onSubmitValid = true; if($.validationEngine.submitValidation(this,settings) == false){ if($.validationEngine.submitForm(this,settings) == true) {return false;} }else{ settings.failure && settings.failure(); return false; } }) if(settings.inlineValidation == true){ // Validating Inline ? $(this).find("[class^=validate]").not("[type=checkbox]").bind("blur change keyup", function(caller){ _inlinEvent(this) }) $(this).find("[class^=validate][type=checkbox]").bind("click", function(caller){ _inlinEvent(this) }) function _inlinEvent(caller){ if($.validationEngine.intercept == false || !$.validationEngine.intercept){ // STOP INLINE VALIDATION THIS TIME ONLY $.validationEngine.onSubmitValid=false; $.validationEngine.loadValidation(caller,settings); }else{ $.validationEngine.intercept = false; } } } }; $.validationEngine = { submitForm : function(caller){ if($.validationEngine.settings.ajaxSubmit){ $.ajax({ type: "POST", url: $.validationEngine.settings.ajaxSubmitFile, async: true, data: $(caller).serialize(), beforeSend: function(){ }, success: function(data){ if(data == "true"){ // EVERYTING IS FINE, SHOW SUCCESS MESSAGE $(caller).css("opacity",1) $(caller).animate({opacity: 0, height: 0}, function(){ $(caller).css("display","none") $(caller).before("
"+$.validationEngine.settings.ajaxSubmitMessage+"
") $.validationEngine.closePrompt(".formError",true) $(".ajaxSubmit").show("slow") if ($.validationEngine.settings.success){ // AJAX SUCCESS, STOP THE LOCATION UPDATE $.validationEngine.settings.success && $.validationEngine.settings.success(); return false; } }) }else{ // HOUSTON WE GOT A PROBLEM (SOMETING IS NOT VALIDATING) data = eval( "("+data+")"); errorNumber = data.jsonValidateReturn.length for(index=0; index
'); } if($.validationEngine.settings.promptPosition == "topLeft" || $.validationEngine.settings.promptPosition == "topRight"){ $(divFormError).append(arrow) $(arrow).html('
'); } } $(formErrorContent).html(promptText) callerTopPosition = $(caller).offset().top; callerleftPosition = $(caller).offset().left; callerWidth = $(caller).width() inputHeight = $(divFormError).height() /* POSITIONNING */ if($.validationEngine.settings.promptPosition == "topRight"){callerleftPosition += callerWidth -30; callerTopPosition += -inputHeight -10; } if($.validationEngine.settings.promptPosition == "topLeft"){ callerTopPosition += -inputHeight -10; } if($.validationEngine.settings.promptPosition == "centerRight"){ callerleftPosition += callerWidth +33; } if($.validationEngine.settings.promptPosition == "bottomLeft"){ callerHeight = $(caller).height(); callerleftPosition = callerleftPosition; callerTopPosition = callerTopPosition + callerHeight + 15; } if($.validationEngine.settings.promptPosition == "bottomRight"){ callerHeight = $(caller).height(); callerleftPosition += callerWidth -30; callerTopPosition += callerHeight + 15; } $(divFormError).css({ top:callerTopPosition, left:callerleftPosition, opacity:0 }) return $(divFormError).animate({"opacity":0.87},function(){return true;}); }, updatePromptText : function(caller,promptText,type,ajaxed) { // UPDATE TEXT ERROR IF AN ERROR IS ALREADY DISPLAYED linkTofield = $(caller).attr("id") + "formError"; linkTofield = linkTofield.replace("[",""); linkTofield = linkTofield.replace("]",""); var updateThisPrompt = "."+ linkTofield; if(type == "pass") { $(updateThisPrompt).addClass("greenPopup") }else{ $(updateThisPrompt).removeClass("greenPopup")}; if(type == "load") { $(updateThisPrompt).addClass("blackPopup") }else{ $(updateThisPrompt).removeClass("blackPopup")}; if(ajaxed) { $(updateThisPrompt).addClass("ajaxed") }else{ $(updateThisPrompt).removeClass("ajaxed")}; $(updateThisPrompt).find(".formErrorContent").html(promptText) callerTopPosition = $(caller).offset().top; inputHeight = $(updateThisPrompt).height() if($.validationEngine.settings.promptPosition == "bottomLeft" || $.validationEngine.settings.promptPosition == "bottomRight"){ callerHeight = $(caller).height() callerTopPosition = callerTopPosition + callerHeight + 15 } if($.validationEngine.settings.promptPosition == "centerRight"){ callerleftPosition += callerWidth +33;} if($.validationEngine.settings.promptPosition == "topLeft" || $.validationEngine.settings.promptPosition == "topRight"){ callerTopPosition = callerTopPosition -inputHeight -10 } $(updateThisPrompt).animate({ top:callerTopPosition }); }, loadValidation : function(caller,settings) { // GET VALIDATIONS TO BE EXECUTED $.validationEngine.settings = settings rulesParsing = $(caller).attr('class'); rulesRegExp = /\[(.*)\]/; getRules = rulesRegExp.exec(rulesParsing); str = getRules[1] pattern = /\W+/; result= str.split(pattern); var validateCalll = $.validationEngine.validateCall(caller,result) return validateCalll }, validateCall : function(caller,rules) { // EXECUTE VALIDATION REQUIRED BY THE USER FOR THIS FIELD var promptText ="" var prompt = $(caller).attr("id"); var caller = caller; ajaxValidate = false var callerName = $(caller).attr("name") $.validationEngine.isError = false; $.validationEngine.showTriangle = true callerType = $(caller).attr("type"); for (i=0; i 1 && callerType == "radio") { // Hack for radio group button, the validation go the first radio caller = $("input[name="+callerName+"]:first"); $.validationEngine.showTriangle = false; var callerId ="."+ $(caller).attr("id")+"formError"; if($(callerId).size()==0){ $.validationEngine.isError = true; }else{ $.validationEngine.isError = false;} } if($("input[name="+callerName+"]").size()> 1 && callerType == "checkbox") { // Hack for checkbox group button, the validation go the first radio caller = $("input[name="+callerName+"]:first"); $.validationEngine.showTriangle = false; var callerId ="div."+ $(caller).attr("id")+"formError"; if($(callerId).size()==0){ $.validationEngine.isError = true; }else{ $.validationEngine.isError = false;} } } function radioHackClose(){ if($("input[name="+callerName+"]").size()> 1 && callerType == "radio") { // Hack for radio group button, the validation go the first radio caller = $("input[name="+callerName+"]:first"); } if($("input[name="+callerName+"]").size()> 1 && callerType == "checkbox") { // Hack for checkbox group button, the validation go the first radio caller = $("input[name="+callerName+"]:first"); } } /* VALIDATION FUNCTIONS */ function _required(caller,rules){ // VALIDATE BLANK FIELD callerType = $(caller).attr("type"); if (callerType == "text" || callerType == "password" || callerType == "textarea"){ if(!$(caller).val()){ $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules[rules[i]].alertText+"
"; } } if (callerType == "radio" || callerType == "checkbox" ){ callerName = $(caller).attr("name"); if($("input[name="+callerName+"]:checked").size() == 0) { $.validationEngine.isError = true; if($("input[name="+callerName+"]").size() ==1) { promptText += $.validationEngine.settings.allrules[rules[i]].alertTextCheckboxe+"
"; }else{ promptText += $.validationEngine.settings.allrules[rules[i]].alertTextCheckboxMultiple+"
"; } } } if (callerType == "select-one") { // added by paul@kinetek.net for select boxes, Thank you callerName = $(caller).attr("id"); if(!$("select[name="+callerName+"]").val()) { $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules[rules[i]].alertText+"
"; } } if (callerType == "select-multiple") { // added by paul@kinetek.net for select boxes, Thank you callerName = $(caller).attr("id"); if(!$("#"+callerName).val()) { $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules[rules[i]].alertText+"
"; } } } function _customRegex(caller,rules,position){ // VALIDATE REGEX RULES customRule = rules[position+1]; pattern = eval($.validationEngine.settings.allrules[customRule].regex); if(!pattern.test($(caller).attr('value'))){ $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules[customRule].alertText+"
"; } } function _ajax(caller,rules,position){ // VALIDATE AJAX RULES customAjaxRule = rules[position+1]; postfile = $.validationEngine.settings.allrules[customAjaxRule].file; fieldValue = $(caller).val(); ajaxCaller = caller; fieldId = $(caller).attr("id"); ajaxValidate = true; ajaxisError = $.validationEngine.isError; /* AJAX VALIDATION HAS ITS OWN UPDATE AND BUILD UNLIKE OTHER RULES */ if(!ajaxisError){ $.ajax({ type: "POST", url: postfile, async: true, data: "validateValue="+fieldValue+"&validateId="+fieldId+"&validateError="+customAjaxRule, beforeSend: function(){ // BUILD A LOADING PROMPT IF LOAD TEXT EXIST if($.validationEngine.settings.allrules[customAjaxRule].alertTextLoad){ if(!$("div."+fieldId+"formError")[0]){ return $.validationEngine.buildPrompt(ajaxCaller,$.validationEngine.settings.allrules[customAjaxRule].alertTextLoad,"load"); }else{ $.validationEngine.updatePromptText(ajaxCaller,$.validationEngine.settings.allrules[customAjaxRule].alertTextLoad,"load"); } } }, success: function(data){ // GET SUCCESS DATA RETURN JSON data = eval( "("+data+")"); // GET JSON DATA FROM PHP AND PARSE IT ajaxisError = data.jsonValidateReturn[2]; customAjaxRule = data.jsonValidateReturn[1]; ajaxCaller = $("#"+data.jsonValidateReturn[0])[0]; fieldId = ajaxCaller; ajaxErrorLength = $.validationEngine.ajaxValidArray.length existInarray = false; if(ajaxisError == "false"){ // DATA FALSE UPDATE PROMPT WITH ERROR; _checkInArray(false) // Check if ajax validation alreay used on this field if(!existInarray){ // Add ajax error to stop submit $.validationEngine.ajaxValidArray[ajaxErrorLength] = new Array(2) $.validationEngine.ajaxValidArray[ajaxErrorLength][0] = fieldId $.validationEngine.ajaxValidArray[ajaxErrorLength][1] = false existInarray = false; } $.validationEngine.ajaxValid = false; promptText += $.validationEngine.settings.allrules[customAjaxRule].alertText+"
"; $.validationEngine.updatePromptText(ajaxCaller,promptText,"",true); }else{ _checkInArray(true) $.validationEngine.ajaxValid = true; if($.validationEngine.settings.allrules[customAjaxRule].alertTextOk){ // NO OK TEXT MEAN CLOSE PROMPT $.validationEngine.updatePromptText(ajaxCaller,$.validationEngine.settings.allrules[customAjaxRule].alertTextOk,"pass",true); }else{ ajaxValidate = false; $.validationEngine.closePrompt(ajaxCaller); } } function _checkInArray(validate){ for(x=0;x"; } } function _length(caller,rules,position){ // VALIDATE LENGTH startLength = eval(rules[position+1]); endLength = eval(rules[position+2]); feildLength = $(caller).attr('value').length; if(feildLengthendLength){ $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules["length"].alertText+startLength+$.validationEngine.settings.allrules["length"].alertText2+endLength+$.validationEngine.settings.allrules["length"].alertText3+"
" } } function _maxCheckbox(caller,rules,position){ // VALIDATE CHECKBOX NUMBER nbCheck = eval(rules[position+1]); groupname = $(caller).attr("name"); groupSize = $("input[name='"+groupname+"']:checked").size(); if(groupSize > nbCheck){ $.validationEngine.showTriangle = false $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules["maxCheckbox"].alertText+"
"; } } function _minCheckbox(caller,rules,position){ // VALIDATE CHECKBOX NUMBER nbCheck = eval(rules[position+1]); groupname = $(caller).attr("name"); groupSize = $("input[name='"+groupname+"']:checked").size(); if(groupSize < nbCheck){ $.validationEngine.isError = true; $.validationEngine.showTriangle = false; promptText += $.validationEngine.settings.allrules["minCheckbox"].alertText+" "+nbCheck+" "+$.validationEngine.settings.allrules["minCheckbox"].alertText2+"
"; } } return($.validationEngine.isError) ? $.validationEngine.isError : false; }, closePrompt : function(caller,outside) { // CLOSE PROMPT WHEN ERROR CORRECTED if(outside){ $(caller).fadeTo("fast",0,function(){ $(caller).remove(); }); return false; } if(!ajaxValidate){ linkTofield = $(caller).attr("id") + "formError"; linkTofield = linkTofield.replace("[",""); linkTofield = linkTofield.replace("]",""); closingPrompt = "."+linkTofield; $(closingPrompt).fadeTo("fast",0,function(){ $(closingPrompt).remove(); }); } }, submitValidation : function(caller,settings) { // FORM SUBMIT VALIDATION LOOPING INLINE VALIDATION var stopForm = false; $.validationEngine.settings = settings $.validationEngine.ajaxValid = true $(caller).find(".formError").remove(); var toValidateSize = $(caller).find("[class^=validate]").size(); $(caller).find("[class^=validate]").each(function(){ callerId = $(this).attr("id") if(!$("."+callerId+"formError").hasClass("ajaxed")){ // DO NOT UPDATE ALREADY AJAXED FIELDS (only happen if no normal errors, don't worry) var validationPass = $.validationEngine.loadValidation(this,settings); return(validationPass) ? stopForm = true : ""; } }); ajaxErrorLength = $.validationEngine.ajaxValidArray.length // LOOK IF SOME AJAX IS NOT VALIDATE for(x=0;xul").hide(); } // return all items with sublists return this.filter(":has(>ul)"); }, applyClasses: function(settings, toggler) { // TODO use event delegation this.filter(":has(>ul):not(:has(>a))").find(">span").unbind("click.treeview").bind("click.treeview", function(event) { // don't handle click events on children, eg. checkboxes if ( this == event.target ) toggler.apply($(this).next()); }).add( $("a", this) ).hoverClass(); if (!settings.prerendered) { // handle closed ones first this.filter(":has(>ul:hidden)") .addClass(CLASSES.expandable) .replaceClass(CLASSES.last, CLASSES.lastExpandable); // handle open ones this.not(":has(>ul:hidden)") .addClass(CLASSES.collapsable) .replaceClass(CLASSES.last, CLASSES.lastCollapsable); // create hitarea if not present var hitarea = this.find("div." + CLASSES.hitarea); if (!hitarea.length) hitarea = this.prepend("
").find("div." + CLASSES.hitarea); hitarea.removeClass().addClass(CLASSES.hitarea).each(function() { var classes = ""; $.each($(this).parent().attr("class").split(" "), function() { classes += this + "-hitarea "; }); $(this).addClass( classes ); }) } // apply event to hitarea this.find("div." + CLASSES.hitarea).click( toggler ); }, treeview: function(settings) { settings = $.extend({ cookieId: "treeview" }, settings); if ( settings.toggle ) { var callback = settings.toggle; settings.toggle = function() { return callback.apply($(this).parent()[0], arguments); }; } // factory for treecontroller function treeController(tree, control) { // factory for click handlers function handler(filter) { return function() { // reuse toggle event handler, applying the elements to toggle // start searching for all hitareas toggler.apply( $("div." + CLASSES.hitarea, tree).filter(function() { // for plain toggle, no filter is provided, otherwise we need to check the parent element return filter ? $(this).parent("." + filter).length : true; }) ); return false; }; } // click on first element to collapse tree $("a:eq(0)", control).click( handler(CLASSES.collapsable) ); // click on second to expand tree $("a:eq(1)", control).click( handler(CLASSES.expandable) ); // click on third to toggle tree $("a:eq(2)", control).click( handler() ); } // handle toggle event function toggler() { $(this) .parent() // swap classes for hitarea .find(">.hitarea") .swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea ) .swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea ) .end() // swap classes for parent li .swapClass( CLASSES.collapsable, CLASSES.expandable ) .swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable ) // find child lists .find( ">ul" ) // toggle them .heightToggle( settings.animated, settings.toggle ); if ( settings.unique ) { $(this).parent() .siblings() // swap classes for hitarea .find(">.hitarea") .replaceClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea ) .replaceClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea ) .end() .replaceClass( CLASSES.collapsable, CLASSES.expandable ) .replaceClass( CLASSES.lastCollapsable, CLASSES.lastExpandable ) .find( ">ul" ) .heightHide( settings.animated, settings.toggle ); } } this.data("toggler", toggler); function serialize() { function binary(arg) { return arg ? 1 : 0; } var data = []; branches.each(function(i, e) { data[i] = $(e).is(":has(>ul:visible)") ? 1 : 0; }); $.cookie(settings.cookieId, data.join(""), settings.cookieOptions ); } function deserialize() { var stored = $.cookie(settings.cookieId); if ( stored ) { var data = stored.split(""); branches.each(function(i, e) { $(e).find(">ul")[ parseInt(data[i]) ? "show" : "hide" ](); }); } } // add treeview class to activate styles this.addClass("treeview"); // prepare branches and find all tree items with child lists var branches = this.find("li").prepareBranches(settings); switch(settings.persist) { case "cookie": var toggleCallback = settings.toggle; settings.toggle = function() { serialize(); if (toggleCallback) { toggleCallback.apply(this, arguments); } }; deserialize(); break; case "location": var current = this.find("a").filter(function() { return this.href.toLowerCase() == location.href.toLowerCase(); }); if ( current.length ) { // TODO update the open/closed classes var items = current.addClass("selected").parents("ul, li").add( current.next() ).show(); if (settings.prerendered) { // if prerendered is on, replicate the basic class swapping items.filter("li") .swapClass( CLASSES.collapsable, CLASSES.expandable ) .swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable ) .find(">.hitarea") .swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea ) .swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea ); } } break; } branches.applyClasses(settings, toggler); // if control option is set, create the treecontroller and show it if ( settings.control ) { treeController(this, settings.control); $(settings.control).show(); } return this; } }); // classes used by the plugin // need to be styled via external stylesheet, see first example $.treeview = {}; var CLASSES = ($.treeview.classes = { open: "open", closed: "closed", expandable: "expandable", expandableHitarea: "expandable-hitarea", lastExpandableHitarea: "lastExpandable-hitarea", collapsable: "collapsable", collapsableHitarea: "collapsable-hitarea", lastCollapsableHitarea: "lastCollapsable-hitarea", lastCollapsable: "lastCollapsable", lastExpandable: "lastExpandable", last: "last", hitarea: "hitarea" }); })(jQuery); var wptheme_DebugUtils = { // summary: Collection of utilities for logging debug messages. enabled: false, log: function ( /*String*/className, /*String*/message ) { // summary: Logs a debugging message, if debugging is enabled. // className: the javascript class name or function name which is logging the message // message: the message to log if ( this.enabled ) { message = className + " ==> " + message; if ( typeof( console ) == "undefined" ) { console.debug( message ); } else { //better alternative for browsers that don't support console???? alert( message ); } } } } var wptheme_HTMLElementUtils = { // summary: Collection of utility functions useful for manipulating HTML elements in a cross-browser fashion. className: "wptheme_HTMLElementUtils", _debugUtils: wptheme_DebugUtils, _uniqueIdCounter: 0, getUniqueId: function () { // summary: Generates a unique identifier (to the current page) by appending a counter to a set prefix. // A page refresh resets the unique identifier counter. // returns: a unique identifier var retVal = "wptheme_unique_" + this._uniqueIdCounter; this._uniqueIdCounter++; return retVal; // String }, sizeToViewableArea: function ( /*HTMLElement*/element ) { // summary: Sizes the given element to the viewable area of the browser in a cross-browser fashion. // element: the html element to size var browserDimensions = new BrowserDimensions(); element.style.height = browserDimensions.getViewableAreaHeight() + "px"; element.style.width = browserDimensions.getViewableAreaWidth() + "px"; element.style.top = browserDimensions.getScrollFromTop() + "px"; element.style.left = browserDimensions.getScrollFromLeft() + "px"; }, sizeToEntireArea: function ( /*HTMLElement*/element ) { // summary: Sizes the given element to the viewable area plus the scroll area. // element: the html element to size var browserDimensions = new BrowserDimensions(); //The getHTMLElement*() functions return the exact size of the body element in IE even if the viewable area is //larger (i.e. no scroll bars). In Firefox, the dimensions of the viewable area plus the scrollable area is returned. //So in IE, we take the viewable area if that is larger and the HTMLElement* area if that is larger. element.style.height = Math.max( browserDimensions.getHTMLElementHeight(), browserDimensions.getViewableAreaHeight() ) + "px"; element.style.width = Math.max( browserDimensions.getHTMLElementWidth(), browserDimensions.getViewableAreaWidth() ) + "px"; }, sizeRelativeToViewableArea: function ( /*HTMLElement*/element, /*float*/heightFactor, /*float*/widthFactor ) { // summary: Sizes the given element to a certain multiple of the viewable area. For example, if heightFactor is 0.5, // the height of the given element will be set to half of the viewable area height. // element: the html element to size // heightFactor: the factor to multiply the viewable area height by // widthFactor: the factor to multiply the viewable area width by var browserDimensions = new BrowserDimensions(); element.style.height = ( browserDimensions.getViewableAreaHeight() * heightFactor ) + "px"; element.style.width = ( browserDimensions.getViewableAreaWidth() * widthFactor ) + "px"; }, positionRelativeToViewableArea: function ( /*HTMLElement*/element, /*float*/heightFactor, /*float*/widthFactor ) { // summary: Positions the given element relative to the viewable area. For example, if the heightFactor is 0.5, the // top of the element will be positioned (Y axis) halfway down the viewable area. Note that this means the element // will be ABSOLUTELY positioned. // element: the html element to position // heightFactor: the factor to multiply the viewable area height by // widthFactor: the factor to multiply the viewable area width by var browserDimensions = new BrowserDimensions(); element.style.position = "absolute"; if ( this._debugUtils.enabled ) { this._debugUtils.log( this.className, "Browser's viewable height: " + browserDimensions.getViewableAreaHeight() ); this._debugUtils.log( this.className, "Browser's viewable width: " + browserDimensions.getViewableAreaWidth() ); this._debugUtils.log( this.className, "Browser's scroll from top: " + browserDimensions.getScrollFromTop() ); this._debugUtils.log( this.className, "Browser's scroll from left: " + browserDimensions.getScrollFromLeft() ); } element.style.top = ( ( browserDimensions.getViewableAreaHeight() * heightFactor ) + browserDimensions.getScrollFromTop() ) + "px"; //Scroll left behaves differently in FF & IE in RTL languages. The "correct" behavior is up for debate. In FF, it will return the "correct" value //(scrollLeft switches when the page is rendered right-to-left). In IE, scroll left will basically return the scroll width for the body element. //There's no real "capability" to test for here so the window.attachEvent is a cheap trick to check for IE. //bidiSupport is defined in the theme. if ( bidiSupport.isRTL && window.attachEvent ) { if ( this._debugUtils.enabled ) { this._debugUtils.log( this.className, "scrollWidth = " + browserDimensions.getHTMLElementWidth() ); this._debugUtils.log( this.className, "clientWidth = " + browserDimensions.getViewableAreaWidth() ); this._debugUtils.log( this.className, "Scroll Offset should be: " + ( browserDimensions.getHTMLElementWidth() - browserDimensions.getViewableAreaWidth() - browserDimensions.getScrollFromLeft() ) ); } element.style.left = ( ( browserDimensions.getViewableAreaWidth() * widthFactor) + ( browserDimensions.getHTMLElementWidth() - browserDimensions.getViewableAreaWidth() - browserDimensions.getScrollFromLeft() ) ) + "px"; } else { element.style.left = ( ( browserDimensions.getViewableAreaWidth() * widthFactor ) + browserDimensions.getScrollFromLeft() ) + "px"; } }, positionOutsideElementTopRight: function ( /*HTMLElement*/elementToPosition, /*HTMLElement*/relativeElement ) { // summary: Positions the given element just outside (to the top and lining up with the right edge) of the // relative element. // description: Sets the top (Y-axis) position of the given element to the top of the relative element minus the // height of element being positioned. Sets the left (X-axis) position of the given element to the left position of // the relative element plus the width of the relative element (to get the right edge) minus the width of the element // being positioned (to line the end of the element being positioned up with the right edge of the relative element). elementToPosition.style.position = "absolute"; elementToPosition.style.top = ( this.stripUnits( relativeElement.style.top ) - elementToPosition.offsetHeight ) + "px"; if ( bidiSupport.isRTL ) { elementToPosition.style.left = ( this.stripUnits( relativeElement.style.left ) ) + "px"; } else { elementToPosition.style.left = ( this.stripUnits( relativeElement.style.left ) + relativeElement.offsetWidth - elementToPosition.offsetWidth) + "px"; } }, stripUnits: function ( /*String*/cssProp ) { // summary: Strips any units (i.e. "px") from a CSS style property. // returns: the number value minus any units return parseInt( cssProp.substring( 0, cssProp.length - 2 )); //integer }, addClassName: function ( /*HTMLElement*/element, /*String*/className ) { // summary: Adds the given className to the element's style definitions. // element: the HTMLElement to add the class name to // className: the className to add var clazz = element.className; if ( clazz.indexOf( className ) < 0 ) { element.className += (" " + className); } }, removeClassName: function ( /*HTMLElement*/element, /*String*/className ) { // summary: Removes the given className from the element's style definitions. // element: the HTMLElement to remove the class name from // className: the className to remove var clazz = element.className; var startIndex = clazz.indexOf( className ); if ( startIndex >= 0 ) { clazz = clazz.substring(0, startIndex) + clazz.substring( startIndex + className.length + 1 ); element.className = clazz; } }, hideElementsByTagName: function ( /*String 1...N*/) { // summary: Hides every element of a given tag name. Stores the old visibility style so it can be // restored by the showElementsByTagName function. for ( var i = 0; i < arguments.length; i++ ) { var elements = document.getElementsByTagName( arguments[i] ); for ( var j = 0; j < elements.length; j++ ) { if ( elements[j] && elements[j].style ) { elements[j]._oldVisibilityStyle = elements[j].style.visibility; elements[j].style.visibility = "hidden"; } } } }, showElementsByTagName: function ( /*String 1...N*/) { // summary: Shows every element of a given tag name. Uses the old visibility style so that elements hidden // by hideElementsByTagName are properly restored. for ( var i = 0; i < arguments.length; i++ ) { var elements = document.getElementsByTagName( arguments[i] ); for ( var j = 0; j < elements.length; j++ ) { if ( elements[j] && elements[j].style ) { if ( elements[j]._oldVisibility ) { elements[j].style.visibility = elements[j]._oldVisibility; elements[j]._oldVisibility = null; } else { elements[j].style.visibility = "visible"; } } } } }, addOnload: function ( /*Function*/func ) { // summary: Adds a function to be called on page load. // func: the function to call if ( window.addEventListener ) { window.addEventListener( "load", func, false ); } else if ( window.attachEvent ) { window.attachEvent( "onload", func ); } }, getEventObject: function ( /*Event?*/event ) { // summary: Cross-browser function to retrieve the event object. // event: In W3C-compliant browsers, this object will just simply be // returned // returns: the event object var result = event; if ( !event && window.event ) { result = window.event; } return result; // Event } } var wptheme_CookieUtils = { // summary: Various utility functions for dealing with cookies on the client. _deleteDate: new Date( "1/1/2003" ), _undefinedOrNull: function ( /*Object*/variable ) { // summary: Determines if a given variable is undefined or NULL. // returns: true if undefined OR NULL, false otherwise. return ( typeof ( variable ) == "undefined" || variable == null ); // boolean }, debug: wptheme_DebugUtils, className: "wptheme_CookieUtils", getCookie: function ( /*String*/cookieName ) { // summary: Gets the value for a given cookie name. If no value is found, returns NULL. if ( this.debug.enabled ) { this.debug.log( this.className, "getCookie( " + cookieName + " )" ); } cookieName = cookieName + "=" var retVal = null; if ( this.debug.enabled ) { this.debug.log( this.className, "document.cookie=" + document.cookie ); this.debug.log( this.className, "indexOf cookieName: " + document.cookie.indexOf( cookieName ) ); } if ( document.cookie.indexOf( cookieName ) >= 0 ) { var cookies = document.cookie.split(";"); var c = 0; if ( this.debug.enabled && cookies.length > 0 ) { this.debug.log( this.className, "cookies[0] = " + cookies[0] ); } while ( c < cookies.length && ( cookies[c].indexOf( cookieName ) == -1 ) ) { if ( this.debug.enabled ) { this.debug.log( this.className, "cookies[" + c + "] = " + cookies[0] ); } c=c+1; } //Make sure there's no leading or trailing spaces on our cookie name/value pair. var cookieNVP = cookies[c].replace( /^[ \s]+|[ \s]+$/, '' ); if ( this.debug.enabled ) { this.debug.log( this.className, "cookieName=\"" + cookieName + "\"." ); this.debug.log( this.className, "cookieName.length=\"" + cookieName.length + "\"." ); this.debug.log( this.className, "cookieNVP=\"" + cookieNVP + "\"." ); this.debug.log( this.className, "cookieNVP.length=\"" + cookieNVP.length + "\"." ); } var cookieValue = cookieNVP.substring( cookieName.length ); if ( this.debug.enabled ) { this.debug.log( this.className, "cookie value =\"" + cookieValue + "\"."); } if ( cookieValue != "null" ) { retVal = cookieValue; } } if ( this.debug.enabled ) { this.debug.log( this.className, "getCookie( " + cookieName + " ) return " + retVal ); } return retVal; // String }, setCookie: function ( /*String*/name, /*String*/value, /*Date?*/expiration, /*String?*/path ) { // summary: Creates the cookie based on the given information. // name: the name of the cookie // value: the value for the cookie // expiration: OPTIONAL -- when the cookie should expire // path: OPTIONAL -- the url path the cookie applies to if ( this.debug.enabled ) { this.debug.log( this.className, "set cookie (" + [ name, value, expiration, path ] + ")"); } if ( this._undefinedOrNull( name ) ) { throw Error( "Unable to set cookie! No name given!" ); } if ( this._undefinedOrNull( value ) ) { throw Error( "Unable to set cookie! No value given!" ); } if ( this._undefinedOrNull( expiration ) ) { expiration = ""; } else { expiration = "expiration=" + expiration.toUTCString() + ";"; } if ( this._undefinedOrNull( path ) ) { path = "path=/;"; } else { path = "path=" + path + ";"; } document.cookie=name + '=' + value + ';' + expiration + path; if ( this.debug.enabled ) { this.debug.log( this.className, "document.cookie after setting the cookie=" + document.cookie ); } }, deleteCookie: function ( /*String*/cookieName ) { // summary: Deletes a given cookie by setting the value to "null" and setting the expiration // value to expire completely. if ( this.debug.enabled ) { this.debug.log( this.className, "delete cookie (" + [ cookieName ] + ") "); } if(wpsFLY_isIE){ this.setCookie( cookieName, "null", this._deleteDate); }else{ this.setCookie( cookieName, ""); } } } // Populates and shows a context menu asynchronously. // // uniqueID - some unique identifier describing the context of the menu (i.e. portlet window id) // urlToMenuContents - url target for the iFrame // isLTR - indicates if the page orientation is Left-to-Right // // // This function creates a context menu using the WCL context menu javascript library. It populates this menu // by creating a hidden DIV ( the ID consists of the unique identifier with "_DIV" appended ) which contains // a hidden IFRAME ( the ID consists of the DIV identifier with "_IFRAME" appended ). The IFRAME loads the // specified URL and calls the buildAndDisplayMenu() function upon completion of loading the IFRAME. The document // returned by the specified URL must contain a javascript function called "getMenuContents()" which returns // an array. The contents of the array must be in the following format ( array[i] = ; // array[i+1] = ). The menu is attached to an HTML element with the id equal to the // unique identifier. So, in the portlet context menu case, the image associated with the context menu must have // an ID equal to the portlet window ID. The dynamically created DIV and IFRAME are deleted after the menu // contents are populated and the same menu is returned for the duration of the request in which it was created. // //Control debugging. // -1 - no debugging // 0 - minimal debugging ( adding items to menus ) // 1 - medium debugging ( function entry/exit ) // 2 - maximum debugging ( makes iframe visible ) // 999 - make iframe visible only var asynchContextMenuDebug = -1; var asynchContextMenuMouseOverIndicator = ""; var portletIdMap = new Object(); function asynchContextMenuOnMouseClickHandler( uniqueID, isLTR, urlToMenuContents, menuBorderStyle, menuTableStyle, menuItemStyle, menuItemSelectedStyle, emptyMenuText, loadingImage, renderBelow ) { var menuID = "contextMenu_" + uniqueID; var menu = getContextMenu( menuID ); if (menu == null) { asynchContextMenu_menuCurrentlyLoading = uniqueID; if ( loadingImage ) { setLoadingImage( loadingImage ); } menu = createContextMenu( menuID, isLTR, null, menuBorderStyle, menuTableStyle, emptyMenuText, null, renderBelow ); loadAsynchContextMenu( uniqueID, urlToMenuContents, isLTR, menuItemStyle, menuItemSelectedStyle, '', true ); } else { if ( asynchContextMenu_menuCurrentlyLoading == uniqueID ) { return; } showContextMenu( menuID, document.getElementById( uniqueID ) ); } } var asynchContextMenu_originalMenuImgElementSrc; function setLoadingImage( img ) { asynchContextMenu_originalMenuImgElementSrc = document.getElementById( asynchContextMenu_menuCurrentlyLoading + "_img" ).src; document.getElementById( asynchContextMenu_menuCurrentlyLoading + "_img" ).src = img; } function clearLoadingImage() { document.getElementById( asynchContextMenu_menuCurrentlyLoading + "_img" ).src = asynchContextMenu_originalMenuImgElementSrc; } function loadAsynchContextMenu( uniqueID, url, isLTR, menuItemStyle, menuItemSelectedStyle, emptyMenuText, showMenu, onMenuAffordanceShowHandler ) { asynchDebug( 'ENTRY loadAsynchContextMenu p1=' + uniqueID + '; p2=' + url + '; p3=' + isLTR + '; p4=' + isLTR); var menuID = "contextMenu_" + uniqueID; var dialogTag = null; var ID = uniqueID + '_DIV'; //an iframe wasn't cleaned up properly if ( document.getElementById( ID ) != null ) { closeMenu( ID ); return; } //create the div tag and assign the styles to it dialogTag = document.createElement( "DIV" ); dialogTag.style.position="absolute"; if ( asynchContextMenuDebug < 2 ) { dialogTag.style.left = "0px"; dialogTag.style.top = "-9999px"; dialogTag.style.visibility = "hidden"; } if ( asynchContextMenuDebug >= 2 || asynchContextMenuDebug == 999 ) { dialogTag.style.left = "100px"; dialogTag.style.top = "100px"; dialogTag.style.visibility = "visible"; } dialogTag.id=ID; var styleString = 'null'; if ( menuItemStyle != null ) { styleString = "'" + menuItemStyle + "'"; } if ( menuItemSelectedStyle != null ) { styleString = styleString + ", '" + menuItemSelectedStyle + "'"; } else { styleString = styleString + ", null"; } //alert( 'buildAndDisplayMenu( this.id, this.name, ' + styleString + ', ' + showMenu + ' , ' + callbackFn + ' );' ); //create the iframe this way because onload handlers attached when creating dynamically don't seem to fire dialogTag.innerHTML=''; //append the div tag to the document body document.body.appendChild( dialogTag ); asynchDebug( 'EXIT createDynamicElements' ); } //Builds and displays the menu from the contents of the IFRAME. function buildAndDisplayMenu( menuID, iframeID, menuItemStyle, menuItemSelectedStyle, showMenu, onMenuAffordanceShowHandler ) { asynchDebug( 'ENTRY buildAndDisplayMenu p1=' + menuID + '; p2=' + iframeID + '; p3=' + showMenu + '; p4=' + onMenuAffordanceShowHandler ); //get the context menu, should have already been created. var menu = getContextMenu( menuID ); //clear out our loading indicator clearLoadingImage(); asynchContextMenu_menuCurrentlyLoading = null; //if the menu doesn't exist, we shouldn't even be here....but just in case. if ( menu == null ) { return false; } //strip the _IFRAME from the id to come up with the DIV id index = iframeID.indexOf( "_IFRAME" ); var divID = iframeID.substring( 0, index ); //strip the _DIV from the id to come up with the portlet id index2 = divID.indexOf( "_DIV" ); var uniqueID = divID.substring( 0, index2 ); asynchDebug( 'divID = ' + divID ); asynchDebug( 'uniqueID = ' + uniqueID ); var frame, c=-1, done=false; //In IE, referencing the iFrame via the name in the window.frames[] array //does not appear to work in this case, so we have to cycle through all the //frames and compare the names to find the correct one. while ( ( c + 1 ) < window.frames.length && !done ) { c=c+1; //We have to surround this with a try/catch block because there are //cases where attempting to access the 'name' property of the current //frame in the array will generate an access denied exception. This is //OK to ignore because any frame that generates this exception shouldn't //be the one we are looking for. try { done = ( window.frames[c].name == iframeID ); } catch ( e ) { //do nothing. } } //Check for the existence of the function we are looking to call. //If not, don't bother creating the menu. if ( window.frames[c].getMenuContents ) { contents = window.frames[c].getMenuContents(); } else { //we were unable to load the context menu for whatever reason return false; } //Cycle through the array created by the getMenuContents() //function. The structure of the array should be [url, name]. for ( i=0; i < contents.length; i=i+3 ) { asynchDebug2( 'Adding item: ' + contents[i+1] ); asynchDebug2( 'URL: ' + contents[i] ); if ( contents[i] ) { asynchDebug2( 'url length: ' + contents[i].length ); } asynchDebug2( 'icon: ' + contents[i+2] ); if ( contents[i] && contents[i].length != 0 ) { var icon = null; if ( contents[i+2] && contents[i+2].length != 0 ) { icon = contents[i+2]; } menu.add( new UilMenuItem( contents[i+1], true, '', contents[i], null, icon, null, menuItemStyle, menuItemSelectedStyle ) ); } } //our target image should have an ID of the uniqueID var target = document.getElementById( uniqueID ); //remove our iframe since we've created the menu, we don't need the iframe on this request anymore. // (148004) deleting the elements causes the status bar to spin forever on mozilla //deleteDynamicElements( divID ); asynchDebug( 'EXIT buildAndDisplayMenu' ); //asynchContextMenuOnLoadCheck( menuID, uniqueID, target, onMenuAffordanceShowHandler ); //...and display! if ( showMenu == null || showMenu == true ) { return showContextMenu( menuID, target ); } } function asynchDebug( str ) { if ( asynchContextMenuDebug >= 1 && asynchContextMenuDebug != 999 ) { alert( str ); } } function asynchDebug2( str ) { if ( asynchContextMenuDebug >= 0 && asynchContextMenuDebug != 999 ) { alert( str) ; } } //MMD - this function is used so that relative URLs may be used with the context menus. function asynchDoFormSubmit( url ){ var formElem = document.createElement("form"); document.body.appendChild(formElem); formElem.setAttribute("method", "GET"); var delimLocation = url.indexOf("?"); if (delimLocation >= 0) { var newUrl = url.substring(0, delimLocation); var paramsEnd = url.length; // test to see if a # fragment identifier (the layout node id) is appended to the end of the URL var layoutNodeLocation = url.indexOf("#"); if (layoutNodeLocation >= 0 && layoutNodeLocation > delimLocation) { paramsEnd = layoutNodeLocation; newUrl = newUrl + url.substring(layoutNodeLocation, url.length); } var params = url.substring(delimLocation + 1, paramsEnd); var paramArray = params.split("&"); for (var i = 0; i < paramArray.length; i++) { var name = paramArray[i].substring(0, paramArray[i].indexOf("=")); var value = paramArray[i].substring(paramArray[i].indexOf("=") + 1, paramArray[i].length); var inputElem = document.createElement("input"); inputElem.setAttribute("type", "hidden"); inputElem.setAttribute("name", name); inputElem.setAttribute("value", value); formElem.appendChild(inputElem); } url = newUrl; } formElem.setAttribute("action", url); formElem.submit(); } var asynchContextMenu_menuCurrentlyLoading = null; function menuMouseOver( id, selectedImage ) { if ( asynchContextMenu_menuCurrentlyLoading != null ) return; portletIdMap[id] = 'menu_'+id+'_img'; showAffordance(id, selectedImage); } function menuMouseOut( id, disabledImage ) { if ( asynchContextMenu_menuCurrentlyLoading != null ) return; hideAffordance(id , disabledImage); portletIdMap[id] = ""; } function showAffordance( id, selectedImage ) { document.getElementById( 'menu_'+id ).style.cursor='pointer'; document.getElementById( 'menu_'+id+'_img').src=selectedImage; } function hideAffordance( id, disabledImage ) { document.getElementById( 'menu_'+id ).style.cursor='default'; document.getElementById( 'menu_'+id+'_img').src=disabledImage; } function menuMouseOverThinSkin(id, selectedImage, minimized) { if ( asynchContextMenu_menuCurrentlyLoading != null ) return; portletIdMap[id] = 'menu_'+id+'_img'; showAffordanceThinSkin(id, selectedImage, minimized); } function menuMouseOutThinSkin(id, disabledImage, minimized ) { if ( asynchContextMenu_menuCurrentlyLoading != null) return; hideAffordanceThinSkin(id , disabledImage, minimized); portletIdMap[id] = ""; } function showAffordanceThinSkin(id, selectedImage, minimized) { document.getElementById( 'menu_'+id ).style.cursor='pointer'; document.getElementById( 'portletTitleBar_'+id ).className='wpsThinSkinContainerBar wpsThinSkinContainerBarBorder'; document.getElementById( 'title_'+id ).className='wpsThinSkinDragZoneContainer wpsThinSkinVisible'; document.getElementById( 'menu_'+id+'_img' ).src=selectedImage; } function hideAffordanceThinSkin(id, disabledImage, minimized) { document.getElementById( 'menu_'+id ).style.cursor='default'; /* when minimized, the titlebar should always be displayed so it can be found by the user, so we don't hide it */ if (minimized == null || minimized == false){ document.getElementById( 'portletTitleBar_'+id ).className='wpsThinSkinContainerBar'; } document.getElementById( 'title_'+id ).className='wpsThinSkinDragZoneContainer wpsThinSkinInvisible'; document.getElementById( 'menu_'+id+'_img' ).src=disabledImage; } var onmousedownold_; function closeMenu(id, disabledImage) { hideCurrentContextMenu(); if ( portletIdMap[id] == "") { hideAffordance( id, disabledImage ); } document.onmousedown = onmousedownold_; } function showPortletMenu( id, portletNoActionsText, isRTL, menuPortletURL, disabledImage, loadingImage ) { if ( portletIdMap[id].indexOf( id ) < 0 ) return; asynchContextMenuOnMouseClickHandler('menu_'+id,!isRTL,menuPortletURL, null, null, null, null, portletNoActionsText, loadingImage ); onmousedownold_ = document.onmousedown; document.onmousedown = closeMenu; } function accessibleShowMenu( event , id , portletNoActionsText, isRTL, menuPortletURL, loadingImage ) { if ( event.which == 13 ) { asynchContextMenuOnMouseClickHandler( 'menu_'+id,!isRTL,menuPortletURL, null, null, null, null, portletNoActionsText, loadingImage ); } else { return true; } } wptheme_AsyncMenuAffordance = function ( /*String*/anchorId, /*String*/imageId, /*String*/showingImgUrl, /*String*/hidingImgUrl ) { // summary: Representation of an asynchronous menu's affordance (UI element which triggers the menu to show). Manages the details // of showing/hiding the affordance, if appropriate. // description: In the Portal theme, we want the menu affordance to only show during certain events (e.g. mouseover the page name). The details // of the showing/hiding is a little more complicated than changing the css on an HTML element due to various rendering/accessibility concerns. This // object manages these details. this.anchorId = anchorId; this.imageId = imageId; this.showingImgUrl = showingImgUrl; this.hidingImgUrl = hidingImgUrl; this.show = function () { // summary: Shows the affordance. if (document.getElementById( this.anchorId ) != null) { document.getElementById( this.anchorId ).style.cursor = 'pointer'; document.getElementById( this.imageId ).src=this.showingImgUrl; } } this.hide = function () { // summary: Hides the affordance. if (document.getElementById( this.anchorId ) != null) { document.getElementById( this.anchorId ).style.cursor = 'default'; document.getElementById( this.imageId ).src=this.hidingImgUrl; } } } wptheme_AsyncMenu = function ( /*String*/id, /*String*/menuBorderStyle, /*String*/menuStyle, /*String*/menuItemStyle, /*String*/selectedMenuItemStyle ) { // summary: Representation of an asynchronous context menu. Manages showing/hiding the menu as well as showing/hiding the menu's affordance (UI element // which opens the menu). // id: the menu's id // menuBorderStyle: the style name to be applied to the menu's border // menuStyle: the style name to be applied to the general menu // menuItemStyle: the style name to be applied to the menu item // selectedMenuItemStyle: the style name to be applied to a selected menu item //global utilities this._htmlUtils = wptheme_HTMLElementUtils; //properties passed in at construction time this.id = id; this.menuBorderStyle = menuBorderStyle; this.menuStyle = menuStyle; this.menuItemStyle = menuItemStyle; this.selectedMenuItemStyle = selectedMenuItemStyle; //properties that have to be initialized in the theme this.url = null; this.isRTL = false; this.emptyMenuText = null; this.loadingImgUrl = null; this.affordance = null; this.init = function ( /*String*/ url, /*boolean*/isRTL, /*String*/ emptyMenuText, /*String*/ loadingImgUrl, /*wptheme_MenuAffordance*/affordance, /*boolean*/renderBelow ) { // summary: Convenience function for setting up the required variables for showing the page menu. // url: the url to load page menu contents (usually created with ) // isRTL: is the current locale a right-to-left locale // emptyMenuText: the text to display if the user has no valid options // loadingImgUrl: the url to the image to display while the menu is loading this.url = url; this.isRTL = isRTL; this.emptyMenuText = emptyMenuText; this.loadingImgUrl = loadingImgUrl; this.affordance = affordance; this.renderBelow = renderBelow; } this.show = function ( /*Event?*/evt ) { // summary: Shows the page menu for the selected page. // description: Typically triggered by 2 types of events: click and keypress. On a click event, we just want to show the menu. On a keypress // event, we want to make sure the ENTER/RETURN key was pressed before showing the menu. // event: Event object passed in when triggered from a key press event. evt = this._htmlUtils.getEventObject( evt ); var show = false; var result; //On a keypress event, we want to make sure the ENTER/RETURN key was pressed before showing the menu. if ( evt && evt.type == "keypress" ) { var keyCode = -1; if ( evt && evt.which ){ keyCode = evt.which; } else { keyCode = evt.keyCode } //Enter/Return was the key that triggered this keypress event. if ( keyCode == 13 ) { show = true; } } else { //Some other kind of event, just show the menu already... show = true; } //Show the menu if necessary. if ( show ) { result = asynchContextMenuOnMouseClickHandler( this.id, !this.isRTL, this.url, this.menuBorderStyle, this.menuStyle, this.menuItemStyle, this.selectedMenuItemStyle, this.emptyMenuText, this.loadingImgUrl, this.renderBelow ); } return result; } this.showAffordance = function () { // summary: Shows the affordance associated with the given asynchronous menu. if ( asynchContextMenu_menuCurrentlyLoading == null ) { this.affordance.show(); } } this.hideAffordance = function () { // summary: Hides the affordance associated with the given asynchronous menu. if ( asynchContextMenu_menuCurrentlyLoading == null ) { this.affordance.hide(); } } } wptheme_ContextMenuUtils = { // summary: Utility object for managing the different context menus in the theme. Constructs the wptheme_AsyncMenu objects here, initialization must take place in // the head section of the HTML document (usually the initialization values require the usage of JSP tags). moreMenu: new wptheme_AsyncMenu( "wptheme_more_menu", "wptheme-more-menu-border", "wptheme-more-menu", "wptheme-more-menu-item", "wptheme-more-menu-item-selected", true ), topNavPageMenu: new wptheme_AsyncMenu( "wptheme_selected_page_menu", "wptheme-page-menu-border", "wptheme-page-menu", "wptheme-page-menu-item", "wptheme-page-menu-item-selected" ), sideNavPageMenu: new wptheme_AsyncMenu( "wptheme_selected_page_menu", "wptheme-page-menu-border", "wptheme-page-menu", "wptheme-page-menu-item", "wptheme-page-menu-item-selected" ) } ////////////////////////////////////////////////////////////////// // begin BrowserDimensions object definition BrowserDimensions.prototype = new Object(); BrowserDimensions.prototype.constructor = BrowserDimensions; BrowserDimensions.superclass = null; function BrowserDimensions(){ this.body = document.body; if (this.isStrictDoctype() && !this.isSafari()) { this.body = document.documentElement; } } BrowserDimensions.prototype.getScrollFromLeft = function(){ return this.body.scrollLeft ; } BrowserDimensions.prototype.getScrollFromTop = function(){ return this.body.scrollTop ; } BrowserDimensions.prototype.getViewableAreaWidth = function(){ return this.body.clientWidth ; } BrowserDimensions.prototype.getViewableAreaHeight = function(){ if(this.isSafari()) return document.documentElement.clientHeight; return this.body.clientHeight ; } BrowserDimensions.prototype.getHTMLElementWidth = function(){ return this.body.scrollWidth ; } BrowserDimensions.prototype.getHTMLElementHeight = function(){ return this.body.scrollHeight ; } BrowserDimensions.prototype.isStrictDoctype = function(){ return (document.compatMode && document.compatMode != "BackCompat"); } BrowserDimensions.prototype.isSafari = function(){ return (navigator.userAgent.toLowerCase().indexOf("safari") >= 0); } BrowserDimensions.prototype.isOpera = function(){ return (navigator.userAgent.toLowerCase().indexOf("opera") >= 0); } // end BrowserDimensions object definition ////////////////////////////////////////////////////////////////// //Provides a controller for enabling and disabling javascript events //on a particular HTML element. Elements must register with the controller //in order to be enabled/disabled. The act of registering with the controller //disables the element, unless otherwise specified. // // // **The main purpose of this controller is to disable the javascript //actions of certain elements that, if executed prior to the page completely //loading, cause problems. //Object definition for ElementJavascriptEventController function ElementJavascriptEventController() { //Registered elements to disable and enable upon page load. this.elements = new Array(); this.arrayPosition = 0; //Function mappings this.enableAll = enableRegisteredElementsInternal; this.disableAll = disableRegisteredElementsInternal; this.register = registerElementInternal; this.enable = enableRegisteredElementInternal; this.disable = disableRegisteredElementInternal; //Enables all registered items. function enableRegisteredElementsInternal() { for ( c=0; c < this.arrayPosition; c=c+1 ) { this.elements[c].enable(); } } function enableRegisteredElementInternal( id ) { for ( c=0; c < this.arrayPosition; c=c+1 ) { if ( this.elements[c].ID == id ) { this.elements[c].enable(); } } } //Disables all registered items. function disableRegisteredElementsInternal() { for ( c=0; c < this.arrayPosition; c=c+1 ) { this.elements[c].disable(); } } function disableRegisteredElementInternal( id ) { for ( c=0; c < this.arrayPosition; c=c+1 ) { if ( this.elements[c].ID == id ) { this.elements[c].disable(); } } } //Registers an item with the controller. function registerElementInternal( HTMLElementID, doNotDisable, optionalOnEnableJavascriptAction ) { this.elements[ this.arrayPosition ] = new RegisteredElement( HTMLElementID, doNotDisable, optionalOnEnableJavascriptAction ); this.arrayPosition = this.arrayPosition + 1; } } //Object definition for an element registered with the controller. //These objects should only be created by the controller. function RegisteredElement( ElementID, doNotDisable, optionalOnEnableJavascriptAction ) { //Information about the element. this.ID = ElementID; this.oldCursor = "normal"; this.ItemOnMouseDown = null; this.ItemOnMouseUp = null; this.ItemOnMouseOver = null; this.ItemOnMouseOut = null; this.ItemOnMouseClick = null; this.ItemOnBlur = null; this.ItemOnFocus = null; this.ItemOnChange = null; this.onEnableJS = optionalOnEnableJavascriptAction; //Function mappings this.enable = enableInternal; this.disable = disableInternal; //Enables an element. Enabling consists of changing the cursor //style back to the original style, and returning all the stored //javascript events to their original state. If the HTML element //is a button, the disabled property is simply set to false. function enableInternal() { if ( document.getElementById( this.ID ) ) { //Return the old cursor style. document.getElementById( this.ID ).style.cursor = this.oldCursor; //If it's a button, re-enable it. if ( document.getElementById( this.ID ).tagName == "BUTTON" ) { document.getElementById( this.ID ).disabled = false; } else { //Return all the events. document.getElementById( this.ID ).onmousedown = this.ItemOnMouseDown; document.getElementById( this.ID ).onmouseup = this.ItemOnMouseUp; document.getElementById( this.ID ).onmouseover = this.ItemOnMouseOver; document.getElementById( this.ID ).onmouseout = this.ItemOnMouseOut; document.getElementById( this.ID ).onclick = this.ItemOnMouseClick; document.getElementById( this.ID ).onblur = this.ItemOnBlur; document.getElementById( this.ID ).onfocus = this.ItemOnFocus; document.getElementById( this.ID ).onchange = this.ItemOnChange; } //Execute the onEnable Javascript, if specified. if ( this.onEnableJS != null ) { eval( this.onEnableJS ); } } } //Disables an element. Disabling consists of changing the cursor //style to "not-allowed", and setting all the javascript events to //do nothing. If the HTML element is a button, the "disabled" property //is simply set to true. function disableInternal() { if ( document.getElementById( this.ID ) ) { //Set the cursor style to point out that you can't do anything yet this.oldCursor = document.getElementById( this.ID ).style.cursor; document.getElementById( this.ID ).style.cursor = "not-allowed"; //If the HTML element is a BUTTON, we can easily disable it by //setting the disabled property to true. if ( document.getElementById( this.ID ).tagName == "BUTTON" ) { document.getElementById( this.ID ).disabled = true; } else { //Store all the current events registered to the item. this.ItemOnMouseDown = document.getElementById( this.ID ).onmousedown; this.ItemOnMouseUp = document.getElementById( this.ID ).onmouseup; this.ItemOnMouseOver = document.getElementById( this.ID ).onmouseover; this.ItemOnMouseOut = document.getElementById( this.ID ).onmouseout; this.ItemOnMouseClick = document.getElementById( this.ID ).onclick; this.ItemOnBlur = document.getElementById( this.ID ).onblur; this.ItemOnFocus = document.getElementById( this.ID ).onfocus; this.ItemOnChange = document.getElementById( this.ID ).onchange; //Now set all the current events to do nothing. document.getElementById( this.ID ).onmousedown = function () { void(0); return false; }; document.getElementById( this.ID ).onmouseup = function () { void(0); return false; }; document.getElementById( this.ID ).onmouseover = function () { void(0); return false; }; document.getElementById( this.ID ).onmouseout = function () { void(0); return false; }; document.getElementById( this.ID ).onclick = function () { void(0); return false; }; document.getElementById( this.ID ).onblur = function () { void(0); return false; }; document.getElementById( this.ID ).onfocus = function () { void(0); return false; }; document.getElementById( this.ID ).onchange = function () { void(0); return false; }; } } } //Disable the element if ( !doNotDisable ) { this.disable(); } } // Global variables var wpsFLY_isIE = document.all?1:0; var wpsFLY_isNetscape=document.layers?1:0; var wpsFLY_isMoz = document.getElementById && !document.all; // This sets how many pixels of the tab should show when collapsed was 11 var wpsFLY_minFlyout=0; // How many pixels should it move every step? var wpsFLY_move=15; if (wpsFLY_isIE) wpsFLY_move=12; // Specify the scroll speed in milliseconds var wpsFLY_scrollSpeed=1; // Timeout ID for flyout var wpsFLY_timeoutID=1; // How from from top of screen for scrolling var wpsFLY_fromTop=100; var wpsFLY_leftResize; //Cross browser access to required dimensions var wpsFLY_browserDimensions = new BrowserDimensions(); var wpsFLY_initFlyoutExpanded = wpsFLY_getInitialFlyoutState(); // Current state of the flyout for the life of the request (true=in, false=out) var wpsFLY_state = true; var wpsFLY_currIndex = -1; // ----------------------------------------------------------------- // Initialize the Flyout // ----------------------------------------------------------------- function wpsFLY_initFlyout(showHidden) { wpsFLY_Flyout=new wpsFLY_makeFlyout('wpsFLYflyout'); wpsFLY_Flyout.setWidth(wpsFLY_minFlyout); wpsFLY_Flyout.css.overflow = 'hidden'; wpsFLY_Flyout.setLeft( wpsFLY_Flyout.pageWidth() - wpsFLY_minFlyout-1 ); if (wpsFLY_isNetscape||wpsFLY_isMoz) scrolled="window.pageYOffset"; else if (wpsFLY_isIE) scrolled="document.body.scrollTop"; if (wpsFLY_isNetscape||wpsFLY_isMoz) wpsFLY_fromTop=wpsFLY_Flyout.css.top; else if (wpsFLY_isIE) wpsFLY_fromTop=wpsFLY_Flyout.css.pixelTop; if (wpsFLY_isIE) { window.onscroll=wpsFLY_internalScroll; window.onresize=wpsFLY_internalScroll; } else { window.onscroll=wpsFLY_internalScroll(); } if (showHidden) wpsFLY_Flyout.css.visibility="hidden"; else wpsFLY_Flyout.css.visibility="visible"; //Open or close the flyout depending on the init state. if ( wpsFLY_initFlyoutExpanded != null ) { wpsFLY_toggleFlyout( wpsFLY_initFlyoutExpanded, true ); } return; } // ----------------------------------------------------------------- // Initialize the Flyout on left // ----------------------------------------------------------------- function wpsFLY_initFlyoutLeft(showHidden) { wpsFLY_FlyoutLeft=new wpsFLY_makeFlyoutLeft('wpsFLYflyout'); if (wpsFLY_isIE) { wpsFLY_FlyoutLeft.setWidth(wpsFLY_minFlyout); wpsFLY_FlyoutLeft.css.overflow = 'hidden'; wpsFLY_FlyoutLeft.setLeft(0); } else { // Mozilla does not move the scroll to the left for bidi languages wpsFLY_FlyoutLeft.setLeft(wpsFLY_minFlyout - wpsFLY_FlyoutLeft.getWidth()- 4); } if (wpsFLY_isNetscape||wpsFLY_isMoz) scrolled="window.pageYOffset"; else if (wpsFLY_isIE) scrolled="document.body.scrollTop"; if (wpsFLY_isNetscape||wpsFLY_isMoz) wpsFLY_fromTop=wpsFLY_FlyoutLeft.css.top; else if (wpsFLY_isIE) wpsFLY_fromTop=wpsFLY_FlyoutLeft.css.pixelTop; if (wpsFLY_isIE) { window.onscroll=wpsFLY_internalScrollLeft; window.onresize=wpsFLY_internalResizeLeft; } else window.onscroll=wpsFLY_internalScrollLeft(); if (showHidden) wpsFLY_FlyoutLeft.css.visibility="hidden"; else wpsFLY_FlyoutLeft.css.visibility="visible"; //Open or close the flyout depending on the init state. if ( wpsFLY_initFlyoutExpanded != null ) { wpsFLY_toggleFlyout( wpsFLY_initFlyoutExpanded, true ); } } // ----------------------------------------------------------------- // Constructs flyout (default on right) // ----------------------------------------------------------------- function wpsFLY_makeFlyout(obj) { this.origObject=document.getElementById(obj); //get the css for the DIV tag, need it later if (wpsFLY_isNetscape) this.css=eval('document.'+obj); else if (wpsFLY_isMoz) this.css=document.getElementById(obj).style; else if (wpsFLY_isIE) this.css=eval(obj+'.style'); //initialize the expand state wpsFLY_state=1; this.go=0; //get the width if (wpsFLY_isNetscape) this.width=this.css.document.width; else if (wpsFLY_isMoz) this.width=document.getElementById(obj).offsetWidth; else if (wpsFLY_isIE) this.width=eval(obj+'.offsetWidth'); this.setWidth=wpsFLY_internalSetWidth; this.getWidth=wpsFLY_internalGetWidth; //set a left method to make it common across browsers this.left=wpsFLY_internalGetLeft; this.pageWidth=wpsFLY_internalGetPageWidth; this.setLeft = wpsFLY_internalSetLeft; this.obj = obj + "Object"; eval(this.obj + "=this"); } // ----------------------------------------------------------------- // Constructs flyout (on left) // ----------------------------------------------------------------- function wpsFLY_makeFlyoutLeft(obj) { this.origObject=document.getElementById(obj); //get the css for the DIV tag, need it later if (wpsFLY_isNetscape) this.css=eval('document.'+obj); else if (wpsFLY_isMoz) this.css=document.getElementById(obj).style; else if (wpsFLY_isIE) this.css=eval(obj+'.style'); //initialize the expand state wpsFLY_state=1; this.go=0; //get the width if (wpsFLY_isNetscape) this.width=this.css.document.width; else if (wpsFLY_isMoz) this.width=document.getElementById(obj).offsetWidth; else if (wpsFLY_isIE) this.width=eval(obj+'.offsetWidth'); this.setWidth=wpsFLY_internalSetWidthLeft; this.getWidth=wpsFLY_internalGetWidthLeft; //set a left method to make it common across browsers this.left=wpsFLY_internalGetLeft; this.pageWidth=wpsFLY_internalGetPageWidth; this.setLeft = wpsFLY_internalSetLeft; this.obj = obj + "Object"; eval(this.obj + "=this"); } // ----------------------------------------------------------------- // The internal api to get the page width value that is cross browser // ----------------------------------------------------------------- function wpsFLY_internalGetPageWidth() { //get the width return wpsFLY_browserDimensions.getViewableAreaWidth(); } function wpsFLY_internalSetLeft( value ) { this.css.left=value + "px"; } // ----------------------------------------------------------------- // The internal api to set the width value that is cross browser // ----------------------------------------------------------------- function wpsFLY_internalSetWidth(value) { this.css.width = value + "px"; if (navigator.userAgent.indexOf ("Opera") != -1) { var operaIframe=document.getElementById('wpsFLY_flyoutIFrame'); operaIframe.style.width = (value-wpsFLY_minFlyout) + "px" ; } } // ----------------------------------------------------------------- // The internal api to set the width value that is cross browser // ----------------------------------------------------------------- function wpsFLY_internalSetWidthLeft(value) { this.css.width = value + "px"; if (navigator.userAgent.indexOf ("Opera") != -1) { var operaIframe=document.getElementById('wpsFLY_flyoutIFrame'); operaIframe.style.width = (value-wpsFLY_minFlyout) + "px" ; } } // ----------------------------------------------------------------- // The internal api to get the width value that is cross browser // ----------------------------------------------------------------- function wpsFLY_internalGetWidth() { //get the width if (wpsFLY_isNetscape) return eval(this.css.document.width); else if (wpsFLY_isMoz||wpsFLY_isIE) return eval(this.origObject.offsetWidth); } // ----------------------------------------------------------------- // The internal api to get the width value that is cross browser // ----------------------------------------------------------------- function wpsFLY_internalGetWidthLeft() { var width; if (wpsFLY_isNetscape) width = eval(this.css.document.width); else if (wpsFLY_isMoz||wpsFLY_isIE) width = eval(this.origObject.offsetWidth); return width; } // ----------------------------------------------------------------- // The internal api to get the left value that is cross browser // ----------------------------------------------------------------- function wpsFLY_internalGetLeft() { if (wpsFLY_isNetscape||wpsFLY_isMoz) leftfunc=parseInt(this.css.left); else if (wpsFLY_isIE) leftfunc=eval(this.css.pixelLeft); return leftfunc; } // ----------------------------------------------------------------- // The internal fly out function, called my real function, only // wpsFLY_moveOutFlyout should call this function. // ----------------------------------------------------------------- function wpsFLY_internalMoveOut() { document.getElementById('wpsFLYflyout').className = "portalFlyoutExpanded"; if (wpsFLY_Flyout.left() - wpsFLY_move > wpsFLY_Flyout.pageWidth()+ wpsFLY_browserDimensions.getScrollFromLeft() - wpsFLY_Flyout.width ) { var newwidth= wpsFLY_Flyout.getWidth()+wpsFLY_move; wpsFLY_Flyout.setWidth(newwidth); wpsFLY_Flyout.setLeft(wpsFLY_Flyout.left() - wpsFLY_move); wpsFLY_timeoutID=setTimeout("wpsFLY_internalMoveOut()",wpsFLY_scrollSpeed); wpsFLY_Flyout.go=1; } else { wpsFLY_Flyout.setLeft(wpsFLY_Flyout.pageWidth() + wpsFLY_browserDimensions.getScrollFromLeft() - wpsFLY_Flyout.width); wpsFLY_Flyout.setWidth(wpsFLY_Flyout.width); wpsFLY_Flyout.go=0; wpsFLY_state=0; } } // ----------------------------------------------------------------- // The internal slide out function, called my real function, only // wpsFLY_moveOutFlyoutLeft should call this function. For left sided // flyout. // ----------------------------------------------------------------- function wpsFLY_internalMoveOutLeft() { document.getElementById('wpsFLYflyout').className = "portalFlyoutExpanded"; if (wpsFLY_isIE) { if (wpsFLY_FlyoutLeft.getWidth() + wpsFLY_move < wpsFLY_FlyoutLeft.width) { var newwidth= wpsFLY_FlyoutLeft.getWidth()+wpsFLY_move; wpsFLY_FlyoutLeft.setWidth(newwidth); wpsFLY_timeoutID=setTimeout("wpsFLY_internalMoveOutLeft()",wpsFLY_scrollSpeed); wpsFLY_FlyoutLeft.go=1; } else { wpsFLY_FlyoutLeft.setLeft( wpsFLY_FlyoutLeft.left()); wpsFLY_FlyoutLeft.setWidth(wpsFLY_FlyoutLeft.width); wpsFLY_FlyoutLeft.go=0; wpsFLY_state=0; } } else { // Mozilla browsers don't scroll left if( wpsFLY_FlyoutLeft.left()+wpsFLY_move < wpsFLY_browserDimensions.getScrollFromLeft()) { wpsFLY_FlyoutLeft.go=1; wpsFLY_FlyoutLeft.setLeft(wpsFLY_FlyoutLeft.left()+wpsFLY_move); wpsFLY_timeoutID=setTimeout("wpsFLY_internalMoveOutLeft()",wpsFLY_scrollSpeed); } else { wpsFLY_FlyoutLeft.setLeft( wpsFLY_browserDimensions.getScrollFromLeft()); wpsFLY_FlyoutLeft.go=0; wpsFLY_state=0; } } } // ----------------------------------------------------------------- // The internal fly in function, called my real function, only // wpsFLY_moveInFlyout should call this function. // ----------------------------------------------------------------- function wpsFLY_internalMoveIn() { if ( wpsFLY_Flyout.left() + wpsFLY_move < wpsFLY_Flyout.pageWidth() + wpsFLY_browserDimensions.getScrollFromLeft() - wpsFLY_minFlyout ) { wpsFLY_Flyout.go=1; var newwidth= wpsFLY_Flyout.getWidth()-wpsFLY_move; wpsFLY_Flyout.setWidth(newwidth); wpsFLY_Flyout.setLeft(wpsFLY_Flyout.left()+wpsFLY_move); wpsFLY_timeoutID=setTimeout("wpsFLY_internalMoveIn()",wpsFLY_scrollSpeed); } else { wpsFLY_Flyout.setWidth(wpsFLY_minFlyout); wpsFLY_Flyout.setLeft(wpsFLY_Flyout.pageWidth() + wpsFLY_browserDimensions.getScrollFromLeft() - wpsFLY_minFlyout); wpsFLY_Flyout.go=0; wpsFLY_state=1; } } // ----------------------------------------------------------------- // The internal slide in function, called my real function, only // wpsFLY_moveInFlyoutLeft should call this function. For left sided // flyout. // ----------------------------------------------------------------- function wpsFLY_internalMoveInLeft() { if (wpsFLY_isIE) { if (wpsFLY_FlyoutLeft.getWidth() - wpsFLY_move > wpsFLY_minFlyout) { var newwidth= wpsFLY_FlyoutLeft.getWidth() - wpsFLY_move; wpsFLY_FlyoutLeft.setWidth(newwidth); wpsFLY_timeoutID=setTimeout("wpsFLY_internalMoveInLeft()",wpsFLY_scrollSpeed); wpsFLY_FlyoutLeft.go=1; } else { wpsFLY_FlyoutLeft.setWidth(wpsFLY_minFlyout); wpsFLY_FlyoutLeft.setLeft( wpsFLY_FlyoutLeft.left()); wpsFLY_FlyoutLeft.go=0; wpsFLY_state=1; } } else { if(wpsFLY_FlyoutLeft.left()>-wpsFLY_FlyoutLeft.width+wpsFLY_minFlyout) { wpsFLY_FlyoutLeft.go=1; wpsFLY_FlyoutLeft.setLeft(wpsFLY_FlyoutLeft.left()-wpsFLY_move); wpsFLY_timeoutID=setTimeout("wpsFLY_internalMoveInLeft()",wpsFLY_scrollSpeed); } else { wpsFLY_FlyoutLeft.setLeft( wpsFLY_minFlyout - wpsFLY_FlyoutLeft.getWidth()- 4 ); wpsFLY_FlyoutLeft.go=0; wpsFLY_state=1; } } } // ----------------------------------------------------------------- // The internal scroll function. // ----------------------------------------------------------------- function wpsFLY_internalScroll() { if (!wpsFLY_Flyout.go) { //wpsFLY_Flyout.css.top=eval(scrolled)+parseInt(wpsFLY_fromTop); if (wpsFLY_state==1) { wpsFLY_Flyout.setLeft(wpsFLY_browserDimensions.getScrollFromLeft() + wpsFLY_browserDimensions.getViewableAreaWidth() - wpsFLY_minFlyout); } else { wpsFLY_Flyout.setLeft(wpsFLY_browserDimensions.getScrollFromLeft() + wpsFLY_browserDimensions.getViewableAreaWidth() - wpsFLY_Flyout.width); } } if (wpsFLY_isNetscape||wpsFLY_isMoz) setTimeout('wpsFLY_internalScroll()',20); } // ----------------------------------------------------------------- // The internal scroll left function. // ----------------------------------------------------------------- function wpsFLY_internalScrollLeft() { if (!wpsFLY_FlyoutLeft.go) { //wpsFLY_FlyoutLeft.css.top=eval(scrolled)+parseInt(wpsFLY_fromTop); // scroll horizontally for flyoutin if (wpsFLY_state==1) { if (wpsFLY_isIE) { if (wpsFLY_leftResize == null) { wpsFLY_leftResize = wpsFLY_browserDimensions.getScrollFromLeft(); } wpsFLY_FlyoutLeft.setWidth(wpsFLY_minFlyout); wpsFLY_FlyoutLeft.css.overflow = 'hidden'; wpsFLY_FlyoutLeft.setLeft(wpsFLY_browserDimensions.getScrollFromLeft() - wpsFLY_leftResize); } else { wpsFLY_FlyoutLeft.setLeft(wpsFLY_minFlyout + wpsFLY_browserDimensions.getScrollFromLeft() - wpsFLY_FlyoutLeft.getWidth() - 4); } } } if (wpsFLY_isNetscape||wpsFLY_isMoz) setTimeout('wpsFLY_internalScrollLeft()',20); } // ----------------------------------------------------------------- // The internal resize left function. // ----------------------------------------------------------------- function wpsFLY_internalResizeLeft(){ if (wpsFLY_isIE) { wpsFLY_leftResize = wpsFLY_browserDimensions.getScrollFromLeft(); - wpsFLY_browserDimensions.getViewableAreaWidth(); } } // ----------------------------------------------------------------- // Expand the flyout. The parameter skipSlide indicates whether or not // the flyout should simply be rendered without the slide-out effect. // ----------------------------------------------------------------- function wpsFLY_moveOutFlyout( skipSlide ) { if (this.wpsFLY_Flyout != null) { if ( wpsFLY_state && !skipSlide ) { clearTimeout(wpsFLY_timeoutID); wpsFLY_internalMoveOut(); } if ( wpsFLY_state && skipSlide ) { wpsFLY_Flyout.setLeft(wpsFLY_Flyout.pageWidth() + document.body.scrollLeft - wpsFLY_Flyout.width); wpsFLY_Flyout.setWidth(wpsFLY_Flyout.width); wpsFLY_Flyout.go=0; wpsFLY_state=0; document.getElementById('wpsFLYflyout').className = "portalFlyoutExpanded"; } } if (this.wpsFLY_FlyoutLeft != null) { if ( wpsFLY_state && !skipSlide ) { clearTimeout(wpsFLY_timeoutID); wpsFLY_internalMoveOutLeft(); } if ( wpsFLY_state && skipSlide ) { if ( wpsFLY_isIE ) { wpsFLY_FlyoutLeft.setLeft( wpsFLY_FlyoutLeft.left()); wpsFLY_FlyoutLeft.setWidth(wpsFLY_FlyoutLeft.width); wpsFLY_FlyoutLeft.go=0; wpsFLY_state=0; } else { wpsFLY_FlyoutLeft.setLeft( document.body.scrollLeft); wpsFLY_FlyoutLeft.go=0; wpsFLY_state=0; } document.getElementById('wpsFLYflyout').className = "portalFlyoutExpanded"; } } } // ----------------------------------------------------------------- // Called to close the flyout. This is the method that the function // external to the flyout should call. // ----------------------------------------------------------------- function wpsFLY_moveInFlyout() { if (this.wpsFLY_Flyout != null) { if (!wpsFLY_state) { clearTimeout(wpsFLY_timeoutID); wpsFLY_internalMoveIn(); } } if (this.wpsFLY_FlyoutLeft != null) { if (!wpsFLY_state) { clearTimeout(wpsFLY_timeoutID); wpsFLY_internalMoveInLeft(); } } document.getElementById('wpsFLYflyout').className = "portalFlyoutCollapsed"; } // ----------------------------------------------------------------- // Called to toggle the flyout. This is the method that the function // external to the flyout should call. // ----------------------------------------------------------------- function wpsFLY_toggleFlyout(index, skipSlide) { if(flyOut[index] != null){ var checkIndex = index; var prevIndex=wpsFLY_getCurrIndex(); if(checkIndex==prevIndex){ if(flyOut[index].active==true){ flyOut[index].active=false; /* document.getElementById("toolBarIcon"+prevIndex).src = flyOut[prevIndex].icon; document.getElementById("toolBarIcon"+prevIndex).alt = flyOut[prevIndex].altText; document.getElementById("toolBarIcon"+prevIndex).title = flyOut[prevIndex].altText; */ } else{ flyOut[index].active=true; /* document.getElementById("toolBarIcon"+index).src = flyOut[index].activeIcon; document.getElementById("toolBarIcon"+index).alt = flyOut[index].activeAltText; document.getElementById("toolBarIcon"+index).title = flyOut[index].activeAltText; */ } //Closing flyout, clear the state cookie. wpsFLY_clearStateCookie(); wpsFLY_moveInFlyout(); }else{ if(prevIndex > -1){ flyOut[prevIndex].active=false; /* document.getElementById("toolBarIcon"+prevIndex).src = flyOut[prevIndex].icon; document.getElementById("toolBarIcon"+prevIndex).alt = flyOut[prevIndex].altText; document.getElementById("toolBarIcon"+prevIndex).title = flyOut[prevIndex].altText; */ } flyOut[index].active=true; /* document.getElementById("toolBarIcon"+index).src = flyOut[index].activeIcon; document.getElementById("toolBarIcon"+index).alt = flyOut[index].activeAltText; document.getElementById("toolBarIcon"+index).title = flyOut[index].activeAltText; */ wpsFLY_setCurrIndex(index); document.getElementById("wpsFLY_flyoutIFrame").src = flyOut[index].url; } if(wpsFLY_state){ //Expanding flyout, store the open flyout index in the state cookie. wpsFLY_setStateCookie( index ); wpsFLY_moveOutFlyout( skipSlide ); } } } function wpsFLY_getCurrIndex() { return wpsFLY_currIndex; } function wpsFLY_setCurrIndex(index) { wpsFLY_currIndex = index; } // ----------------------------------------------------------------- // Create a cookie to track the state of the flyout. The value of the // cookie is the index of the open flyout. The cookie is marked for // deletion when the browser closes and the path is set to ensure the // cookie is valid for the entire site. // ----------------------------------------------------------------- function wpsFLY_setStateCookie( index ) { document.cookie='portalOpenFlyout=' + index + '; path=/;'; } // ----------------------------------------------------------------- // Clear the cookie by changing the value to null. By setting the expiration date in // the past, the cookie is marked for deletion when the browser closes. // ----------------------------------------------------------------- function wpsFLY_clearStateCookie() { document.cookie='portalOpenFlyout=null; expires=Wed, 1 Jan 2003 11:11:11 UTC; path=/;'; } // ----------------------------------------------------------------- // Check which side of the page the flyout should show on // ----------------------------------------------------------------- function wpsFLY_onloadShow( isRTL ) { if (this.wpsFLY_minFlyout != null) { var bodyObj = document.getElementById("FLYParent"); if (bodyObj != null) { var showHidden = false; if (isRTL) { bodyObj.onload = wpsFLY_initFlyoutLeft(showHidden); } else { bodyObj.onload = wpsFLY_initFlyout(showHidden); } } } } // ----------------------------------------------------------------- // Write markup out to document for all flyout items // ----------------------------------------------------------------- function wpsFLY_markupLoop( flyOut) { for(arrayIndex = 0; arrayIndex < flyOut.length; arrayIndex++){ if(flyOut[arrayIndex].url != "" && flyOut[arrayIndex].url != null){ document.write('
  • '); document.write(flyOut[arrayIndex].altText); //document.write(''+flyOut[arrayIndex].altText+''); document.write('
  • '); } if ( javascriptEventController ) { javascriptEventController.register( "globalActionLink" + arrayIndex ); //javascriptEventController.register( "toolBarIcon" + arrayIndex ); } } } // ----------------------------------------------------------------- // If we have an empty expanded flyout (via the back button), load // the previously open flyout. // ----------------------------------------------------------------- function wpsFLY_checkForEmptyExpandedFlyout() { var index = wpsFLY_getInitialFlyoutState(); if ( index != null && flyOut[index] != null) { document.getElementById("wpsFLY_flyoutIFrame").src = flyOut[index].url; } } // ----------------------------------------------------------------- // Determine if the flyout should initially open and which flyout // should be loaded. // ----------------------------------------------------------------- function wpsFLY_getInitialFlyoutState() { // Determine if the flyout's initial state is open or closed. if ( document.cookie.indexOf( "portalOpenFlyout=" ) >= 0 ) { var cookies = document.cookie.split(";"); var c = 0; while ( c < cookies.length && ( cookies[c].indexOf( "portalOpenFlyout=" ) == -1 ) ) { c=c+1; } initCookieValue = cookies[c].substring( 18, cookies[c].length ); if ( initCookieValue != "null" ) { return initCookieValue; } else { return null; } } else { return null; } } var wpsInlineShelf_initShelfExpanded = wpsInlineShelf_getInitialShelfState(); // Current state of the flyout for the life of the request (true=expanded, false=collapsed) var wpsInlineShelf_stateExpanded = false; var wpsInlineShelf_currIndex = -1; var wpsInlineShelf_loadingMsg = null; function wpsInlineShelf_markupLoop( shelves ) { document.write(''); } // ----------------------------------------------------------------- // Called to toggle the shelf. This is the method that the function // external to the shelf should call. // ----------------------------------------------------------------- function wpsInlineShelf_toggleShelf(index, skipZoom) { if(wptheme_InlineShelves[index] != null) { var checkIndex = index; var prevIndex=wpsInlineShelf_getCurrIndex(); var newIframeUrl = null; if(checkIndex==prevIndex){ if(wptheme_InlineShelves[index].active==true){ wptheme_InlineShelves[index].active=false; /* document.getElementById("globalActionLinkInlineShelf"+prevIndex).src = wptheme_InlineShelves[prevIndex].icon; document.getElementById("globalActionLinkInlineShelf"+prevIndex).alt = wptheme_InlineShelves[prevIndex].altText; document.getElementById("globalActionLinkInlineShelf"+prevIndex).title = wptheme_InlineShelves[prevIndex].altText; */ wpsInlineShelf_stateExpanded = false; }else{ wptheme_InlineShelves[index].active=true; /* document.getElementById("globalActionLinkInlineShelf"+index).src = wptheme_InlineShelves[index].activeIcon; document.getElementById("globalActionLinkInlineShelf"+index).alt = wptheme_InlineShelves[index].activeAltText; document.getElementById("globalActionLinkInlineShelf"+index).title = wptheme_InlineShelves[index].activeAltText; */ wpsInlineShelf_stateExpanded = true; } }else{ if(prevIndex > -1){ wptheme_InlineShelves[prevIndex].active=false; /* document.getElementById("globalActionLinkInlineShelf"+prevIndex).src = wptheme_InlineShelves[prevIndex].icon; document.getElementById("globalActionLinkInlineShelf"+prevIndex).alt = wptheme_InlineShelves[prevIndex].altText; document.getElementById("globalActionLinkInlineShelf"+prevIndex).title = wptheme_InlineShelves[prevIndex].altText; */ } wptheme_InlineShelves[index].active=true; /* document.getElementById("globalActionLinkInlineShelf"+index).src = wptheme_InlineShelves[index].activeIcon; document.getElementById("globalActionLinkInlineShelf"+index).alt = wptheme_InlineShelves[index].activeAltText; document.getElementById("globalActionLinkInlineShelf"+index).title = wptheme_InlineShelves[index].activeAltText; */ wpsInlineShelf_setCurrIndex(index); wpsInlineShelf_stateExpanded = true; newIframeUrl = wptheme_InlineShelves[index].url; // document.getElementById("wpsInlineShelf_shelfIFrame").src = wptheme_InlineShelves[index].url; } if(wpsInlineShelf_stateExpanded){ //Expanding flyout, store the open shelf index in the state cookie. wpsInlineShelf_setStateCookie( index ); wpsInlineShelf_expandShelf( skipZoom, newIframeUrl ); } else { //Closing shelf, clear the state cookie. wpsInlineShelf_clearStateCookie(); wpsInlineShelf_collapseShelf(); } } } function wpsInlineShelf_getCurrIndex() { return wpsInlineShelf_currIndex; } function wpsInlineShelf_setCurrIndex(index) { wpsInlineShelf_currIndex = index; } // ----------------------------------------------------------------- // Create a cookie to track the state of the shelf. The value of the // cookie is the index of the open shelf. The cookie is marked for // deletion when the browser closes and the path is set to ensure the // cookie is valid for the entire site. // ----------------------------------------------------------------- function wpsInlineShelf_setStateCookie( index ) { document.cookie='portalOpenInlineShelf=' + index + '; path=/;'; } // ----------------------------------------------------------------- // Clear the cookie by changing the value to null. By setting the expiration date in // the past, the cookie is marked for deletion when the browser closes. // ----------------------------------------------------------------- function wpsInlineShelf_clearStateCookie() { document.cookie='portalOpenInlineShelf=null; expires=Wed, 1 Jan 2003 11:11:11 UTC; path=/;'; } // ----------------------------------------------------------------- // Determine if the shelf should initially open and which shelf // should be loaded. // ----------------------------------------------------------------- function wpsInlineShelf_getInitialShelfState() { // Determine if the shelf's initial state is expanded or collapsed. if ( document.cookie.indexOf( "portalOpenInlineShelf=" ) >= 0 ) { var cookies = document.cookie.split(";"); var c = 0; while ( c < cookies.length && ( cookies[c].indexOf( "portalOpenInlineShelf=" ) == -1 ) ) { c=c+1; } initCookieValue = cookies[c].substring( ("portalOpenInlineShelf=".length)+1, cookies[c].length ); if ( initCookieValue != "null" ) { return initCookieValue; } else { return null; } } else { return null; } } // ----------------------------------------------------------------- // Expand the shelf. The parameter skipZoom indicates whether or not // the shelf should simply be rendered without the zoom-out effect. // NOTE: The zoom-out effect is not implemented yet. // ----------------------------------------------------------------- function wpsInlineShelf_expandShelf( skipZoom, newIframeUrl ) { var shelf = document.getElementById("wpsInlineShelf"); wpsInlineShelf_stateExpanded = false; // attach event listeners so when the URL loads or reloads, the iframe will be shown and resized. wpsInlineShelf_AttachIframeEventListeners("wpsInlineShelf_shelfIFrame"); // show the shelf... but not the iframe yet... shelf.style.display = "block"; // We change the URL AFTER the event listeners are hooked up. // If we are not changing the URL, we need to manually resize the iframe. if (null != newIframeUrl) { // when loading a new URL, display the spinning loading graphic wpsInlineShelf_loadingMsg.show(document.getElementById("wpsInlineShelf")); document.getElementById("wpsInlineShelf_shelfIFrame").src = newIframeUrl; } else { wpsInlineShelf_resizeIframe("wpsInlineShelf_shelfIFrame"); } } // ----------------------------------------------------------------- // Collapse the shelf. The parameter skipZoom indicates whether or not // the shelf should simply be rendered without the zoom-in effect. // NOTE: The zoom-in effect is not implemented yet yet. // ----------------------------------------------------------------- function wpsInlineShelf_collapseShelf( skipZoom ) { var shelf = document.getElementById("wpsInlineShelf"); var iframe = document.getElementById("wpsInlineShelf_shelfIFrame"); shelf.style.display = "none"; iframe.style.display = "none"; wpsInlineShelf_loadingMsg.hide(); wpsInlineShelf_stateExpanded = true; } // ----------------------------------------------------------------- // Check which side of the page the shelf should show on // ----------------------------------------------------------------- function wpsInlineShelf_onloadShow( isRTL ) { if ( wpsInlineShelf_initShelfExpanded != null ) { wpsInlineShelf_toggleShelf( wpsInlineShelf_initShelfExpanded, true ); } } var wpsInlineShelf_getFFVersion=navigator.userAgent.substring(navigator.userAgent.indexOf("Firefox")).split("/")[1] var wpsInlineShelf_FFextraHeight=parseFloat(wpsInlineShelf_getFFVersion)>=0.1? 16 : 0 //extra height in px to add to iframe in FireFox 1.0+ browsers function wpsInlineShelf_resizeIframe(iframeID){ var iframe=document.getElementById(iframeID) iframe.style.display = "block"; wpsInlineShelf_loadingMsg.hide(); if (iframe && !window.opera) { /* // put the background color style onto the body of the document in the iframe if (iframe.contentDocument) { var iframeDocBody = iframe.contentDocument.body; if (iframeDocBody.className.indexOf("wpsInlineShelfIframeDocBody",0) == -1) { iframeDocBody.className = iframeDocBody.className + " wpsInlineShelfIframeDocBody"; } } */ if (iframe.contentDocument && iframe.contentDocument.body.offsetHeight) //ns6 syntax iframe.height = iframe.contentDocument.body.offsetHeight+wpsInlineShelf_FFextraHeight; else if (iframe.Document && iframe.Document.body.scrollHeight) //ie5+ syntax iframe.height = iframe.Document.body.scrollHeight; } } function wpsInlineShelf_AttachIframeEventListeners(iframeID) { var iframe=document.getElementById(iframeID) if (iframe && !window.opera) { if (iframe.addEventListener){ iframe.addEventListener("load", wpsInlineShelf_IframeOnloadEventListener, false) } else if (iframe.attachEvent){ iframe.detachEvent("onload", wpsInlineShelf_IframeOnloadEventListener) // Bug fix line iframe.attachEvent("onload", wpsInlineShelf_IframeOnloadEventListener) } } } function wpsInlineShelf_IframeOnloadEventListener(loadevt) { var crossevt=(window.event)? event : loadevt var iframeroot=(crossevt.currentTarget)? crossevt.currentTarget : crossevt.srcElement if (iframeroot) { wpsInlineShelf_resizeIframe(iframeroot.id); } } // ----------------------------------------------------------------- // If we have an empty expanded shelf (via the back button), load // the previously open shelf. // ----------------------------------------------------------------- function wpsInlineShelf_checkForEmptyExpandedShelf() { var index = wpsInlineShelf_getInitialShelfState(); if ( index != null && wptheme_InlineShelves[index] != null) { document.getElementById("wpsInlineShelf_shelfIFrame").src = wptheme_InlineShelves[index].url; } } wptheme_QuickLinksShelf = { _cookieUtils: wptheme_CookieUtils, cookieName: null, expand: function () { // summary: Expand the quick links shelf. document.getElementById("wptheme-expandedQuickLinksShelf").style.display='block'; document.getElementById("wptheme-collapsedQuickLinksShelf").style.display='none'; if ( this.cookieName != null ) { this._cookieUtils.deleteCookie( this.cookieName ); } return false; }, collapse: function () { // summary: Collapse the quick links shelf. document.getElementById("wptheme-expandedQuickLinksShelf").style.display='none'; document.getElementById("wptheme-collapsedQuickLinksShelf").style.display='block'; if ( this.cookieName != null ) { var expires = new Date(); expires.setDate( expires.getDate() + 5 ); this._cookieUtils.setCookie( this.cookieName, "small", expires ); } return false; } } var wpsInlineShelf_LoadingImage = function ( /*String*/cssClassName, /*String*/imageURL, /*String*/imageText ) { // summary: creates loading image for inline shelf // cssClassName: the class name to apply to the overlaid div // imageURL: the url to the image to display in the center of the overlaid div // imageText: the text to display next to the image var elem = document.createElement( "DIV" ); elem.className = cssClassName; elem.id = cssClassName; if ( imageURL && imageURL != "" && imageText ) { elem.innerHTML = "\"\" " + imageText; } var appended = false; this.show = function ( refNode ) { if ( !appended ) { refNode.appendChild( elem ); appended= true; } elem.style.display = 'block'; } this.hide = function () { elem.style.display = 'none'; } } /* //Should script hide iframe from browsers that don't support this script (non IE5+/NS6+ browsers. Recommended): var iframehide="yes" var getFFVersion=navigator.userAgent.substring(navigator.userAgent.indexOf("Firefox")).split("/")[1] var FFextraHeight=parseFloat(getFFVersion)>=0.1? 16 : 0 //extra height in px to add to iframe in FireFox 1.0+ browsers function resizeCaller() { if (document.getElementById) resizeIframe("myiframe") //reveal iframe for lower end browsers? (see var above): if ((document.all || document.getElementById) && iframehide=="no"){ var tempobj=document.all? document.all["myiframe"] : document.getElementById("myiframe") tempobj.style.display="block" } } function resizeIframe(frameid){ var currentfr=document.getElementById(frameid) if (currentfr && !window.opera) { currentfr.style.display="block" if (currentfr.contentDocument && currentfr.contentDocument.body.offsetHeight) //ns6 syntax currentfr.height = currentfr.contentDocument.body.offsetHeight+FFextraHeight; else if (currentfr.Document && currentfr.Document.body.scrollHeight) //ie5+ syntax currentfr.height = currentfr.Document.body.scrollHeight; if (currentfr.addEventListener){ currentfr.addEventListener("load", readjustIframe, false) } else if (currentfr.attachEvent){ currentfr.detachEvent("onload", readjustIframe) // Bug fix line currentfr.attachEvent("onload", readjustIframe) } } } function readjustIframe(loadevt) { var crossevt=(window.event)? event : loadevt var iframeroot=(crossevt.currentTarget)? crossevt.currentTarget : crossevt.srcElement if (iframeroot) resizeIframe(iframeroot.id); } function wptheme_ExpandToolsShelf() { //loadToolsIframe('myiframe', '${inlineTCUrl}'); document.getElementById("wptheme-expandedToolsShelf").style.display='block'; document.getElementById("wptheme-collapsedToolsShelf").style.display='none'; //document.getElementById("wptheme-expandedToolsShelfLink").style.display='block'; //document.getElementById("wptheme-collapsedToolsShelfLink").style.display='none'; document.getElementById("toolsShelfCollapseLink").style.display='block'; document.getElementById("toolsShelfExpandLink").style.display='none'; loadToolsIframe('myiframe', '${inlineTCUrl}'); //if (document.getElementById) // resizeIframe("myiframe"); resizeCaller(); wptheme_createCookie("<%=toolsShelfCookie%>",'small',7); return false; } function wptheme_CollapseToolsShelf() { document.getElementById("wptheme-expandedToolsShelf").style.display='none'; document.getElementById("wptheme-collapsedToolsShelf").style.display='block'; //document.getElementById("wptheme-expandedToolsShelfLink").style.display='none'; //document.getElementById("wptheme-collapsedToolsShelfLink").style.display='block'; document.getElementById("toolsShelfCollapseLink").style.display='none'; document.getElementById("toolsShelfExpandLink").style.display='block'; wptheme_eraseCookie("<%=toolsShelfCookie%>"); return false; } function loadToolsIframe(iframeName, toolsUrl){ alert('loading tools iframe'); if (document.getElementById) { document.getElementById(iframeName).src = toolsUrl; } return false; } */ var wptheme_InlinePalettes = { // summary: Manages the inline palette(s). Tracks the iframe used to display the palettes, as well as the persistent state. // description: Palettes managed by this object must be added using the addPalette method. The addPalette method expects a // PaletteContext object which has the following structure: // { // url: the url to set the iframe to (for CSA, only used as the initial url) // page: the unique id of the page the url will be pointing to // portlet: the unique id of the portlet control the url will be pointing to // newWindow: indicates whether or not the url should be rendered using the Plain theme template // portletWindowState: the window state the portlet should be in // selectionDependent: indicates whether or not the url changes based on the current page selection // } // This PaletteContext object is required to support client-side aggregation. Since, in client-side aggregation, // the page does not always reload in between page changes, the palette may need to be refreshed as the selection // changes in client-side aggregation. This context object gives the client-side aggregation engine all the info // it needs to create the appropriate url for the palette, as needed. // paletteStatus: indicates whether the palette is open or closed (0 = closed, 1 = open) // iframeID: the ID/NAME of the iframe to use // loadingDecorator: the decoration to display while the iframe is loading // currentIndex: the index (into the paletteContextArray) of the currently displaying palette // cookieName: the cookie used to store the state of the palette // paletteContextArray: the array of PaletteContext objects // urlFactory: only used in client-side aggregation -- set during the CSA theme's bootstrap, this function takes the PaletteContext // object described above as the only parameter and returns the url to use to display the palette // INITIALIZATION className: "wptheme_InlinePalettes", //HTML element IDs iframeID: "wpsFLY_flyoutIFrame", //Persistent state of the palette paletteStatus: 0, // 0 = closed, 1 = open currentIndex: -1, // the index of the paletteContextArray which is currently displaying cookieName: "portalOpenFlyout", //Decoration to display while the palette is loading loadingDecorator: null, //needs to provide 2 functions: show and hide. show will receive a single parameter -- the node which should be covered with the decoration //Instance variables urlFactory: null, //expected to be set in the bootstrap of the CSA theme. takes the context as a single parameter and returns the url as the output. paletteContextArray: [], // Array of palettes which can be displayed //Debug debug: wptheme_DebugUtils, init: function ( /*Document?*/doc) { // summary: Initializes the inline palettes. Usually executed on page load. // description: Checks to see if the persisted state indicates the palette should be open or closed. If open, the proper location // should be loaded into the iframe and displayed. // doc: OPTIONAL -- specifies the document to use when initializing (for use when called from within an iframe, for example). if ( this.debug.enabled ) { this.debug.log( this.className, "init( " + [ doc ] + ")" ); } if ( !doc ) { doc = document; } //Retrieve the persisted value. This will be the index into the PaletteContextArray. var value = this.getPersistedValue(); if ( this.debug.enabled ) { this.debug.log( this.className, "retrieved value: " + value ); } if ( value != null && this.paletteContextArray[ value ] ) { this.show( value, true ); } else { this.hide(); } if ( this.debug.enabled ) { this.debug.log( this.className, "return init" ); } }, // DISPLAY CONTROL showCurrent: function () { // summary: Displays the current index or auto selects an index if no current index is selected. var indexToShow = 0; if ( this.currentIndex > -1 ) { indexToShow = this.currentIndex; } this.show( indexToShow ); }, show: function (/*int*/index, /*boolean?*/skipAnimation) { // summary: Displays the specified url in the palette. // url: the url for the iframe. // skipAnimation: OPTIONAL -- skips the loading decorator show/hide steps (used for the case where the palette is open on an initial page load if ( this.debug.enabled ) { this.debug.log( this.className, "show( " + [ index, skipAnimation ] + ")" ); } var iframe = this._getIframeElement(); if ( !iframe ) { return false; } var url = this.getURL( index ); var iframeLocation = window.frames[this.iframeID].location; if ( this.debug.enabled ) { this.debug.log( this.className, "Url returned from getUrl is: " + url ); this.debug.log( this.className, "Current iframe url is: " + iframeLocation.href ); this.debug.log( this.className, "Are they equal? " + ( url == iframeLocation.href ) ); } iframe.parentNode.style.display = "block"; //If we have to load the iframe, call postShow onload. Otherwise, call it immediately since the //iframe is already loaded. //In CSA, the state serialization service returns the url without the protocol, host, and port while //the iframe url includes this information. So we compare the complete href value AND the pathname value of //the iframe location. if ( iframeLocation.href != url && iframeLocation.pathname != url ) { if ( !skipAnimation && this.loadingDecorator != null && this.loadingDecorator.show ) { this.loadingDecorator.show( iframe.parentNode.parentNode ); } iframe.src = url; } else { //The location hasn't changed so go ahead and call the post show behavior. Normally, the post show //behavior executes once the iframe is loaded. this._doPostShow(); } this.persist( index ); this.paletteStatus = 1; this.currentIndex = index; }, hide: function ( doc ) { // summary: Hides the active palette. if ( this.debug.enabled ) { this.debug.log( this.className, "hide( " + [ doc ] + ")" ); } var iframe = this._getIframeElement( doc ); if ( !iframe ) { return false; } iframe.parentNode.style.display = "none"; this.paletteStatus = 0; this.currentIndex = -1; //Execute the post hide behavior. this._doPostHide(); }, _doPostShow: function () { // summary: Called after the iframe is loaded and ready to display. // description: Performs any sizing adjustments necessary (possibly IE) and hides the loading decoration. if ( this.debug.enabled ) { this.debug.log( this.className, "_doPostShow()" ); } var iframe = this._getIframeElement(); if ( iframe.parentNode.style.display == "none" ) { return false; } iframe.style.visibility = "visible"; if ( typeof ( dojo ) != "undefined" ) { var size = dojo.contentBox( iframe ); if ( size.h < 300) { //IE doesn't correctly size the iframe when height is set to 100%. So if the height //is still 0 (IE 6) or small (IE7)after setting the display and visibility, set it manually to the height //of the TD element. var size = dojo.contentBox( iframe.parentNode.parentNode ); iframe.style.height = size.h + "px"; } } if ( this.loadingDecorator != null && this.loadingDecorator.hide ) { this.loadingDecorator.hide(); } }, _doPostHide: function () { // summary: Execute any actions that need to occur after the palette is hidden from view. if ( this.debug.enabled ) { this.debug.log( this.className, "_doPostHide()" ); } var iframe = this._getIframeElement(); iframe.style.visibility = "hidden"; }, // PERSISTENT STATE CONTROL persist: function ( /*String*/value ) { // summary: Persist the given value in a cookie. if ( this.debug.enabled ) { this.debug.log( this.className, "persist(" + [ value ] + ")" ); } wptheme_CookieUtils.setCookie( this.cookieName, value ); }, getPersistedValue: function () { // summary: Retrieve the persisted state for the inline palettes, if one exists. // description: Looks for the "portalOpenFlyout" cookie and parses out it's value. // returns: the persisted value for the portalOpenFlyout cookie or NULL if no value exists. if ( this.debug.enabled ) { this.debug.log( this.className, "getPersistedValue()" ); } return wptheme_CookieUtils.getCookie( this.cookieName ); }, unpersist: function () { // summary: Clears out the persisted value. // description: Sets the cookie's value to NULL and sets it to expire in the past. // returns: the index of the persisted value if ( this.debug.enabled ) { this.debug.log( this.className, "unpersist()" ); } var value = this.getPersistedValue(); wptheme_CookieUtils.deleteCookie( this.cookieName ); return value; }, // UTILITY _getIframeElement: function ( /*Document?*/doc ) { // summary: Retrieves the iframe HTML element from the HTML document specified. If no HTML document is specified, // the global HTML document is used. // doc: OPTIONAL -- specify the HTML document in which to look up the IFRAME object. // returns: the iframe HTML element if ( this.debug.enabled ) { this.debug.log( this.className, "_getIframeElement( " + [ doc ] + ")" ); } if ( !doc ) { doc = document; } return doc.getElementById( this.iframeID ); // the IFRAME HTML element }, addPalette: function ( /*PaletteContext*/context ) { if ( this.debug.enabled ){ this.debug.log( this.className, "addPalette( " + [ context ] + ")" ); } this.paletteContextArray.push( context ); }, getURL: function ( /*int*/value ) { if ( this.debug.enabled ) { this.debug.log( this.className, "getURL( " + [ value ] + ")" ); } var url = this.paletteContextArray[ value ].url; if ( document.isCSA && this.urlFactory != null ) { url = this.urlFactory( this.paletteContextArray[ value ] ); } return url; } } var wptheme_DarkTransparentLoadingDecorator = function ( /*String*/cssClassName, /*String*/imageURL, /*String*/imageText ) { // summary: Displays a partially opaque overlay with a centered image and text to partially obscure and prevent // interaction with a loading portion of the HTML page. // cssClassName: the class name to apply to the overlaid div // imageURL: the url to the image to display in the center of the overlaid div // imageText: the text to display next to the image this.className = "wptheme_DarkTransparentLoadingDecorator"; var elem = document.createElement( "DIV" ); elem.className = cssClassName; elem.style.position = "absolute"; if ( imageURL && imageURL != "" && imageText ) { var text = document.createElement( "DIV" ); text.style.position = "relative"; text.style.top = "50%"; text.style.left = "40%"; text.innerHTML = " " + imageText; elem.appendChild( text ); } var appended = false; this.show = function ( refNode ) { if ( !appended ) { document.body.appendChild( elem ); appended= true; } elem.style.display = 'block'; elem.style.top = (dojo.coords( refNode, true ).y + 1) + "px"; elem.style.left = (dojo.coords( refNode, true ).x + 1) + "px"; var size = dojo.contentBox( refNode ); elem.style.height = (size.h - 2) + "px"; elem.style.width = (size.w - 2) + "px"; } this.hide = function () { elem.style.display = 'none'; } } var wptheme_InlinePalettesContainer = { // summary: Manages the inline palettes container. // description: Manages the container which holds the palettes. Made up of two parts: the first is the container. // The container holds the links to select a palette, as well as, the actual iframe which displays // the palette once a palette is selected. The second is the toggle element. The toggle element is // the html element which actually opens and closes the container element. // containerStatus: indicates whether the container is open or closed (0 = closed, 1 = open) // openCssClassName: indicates the CSS class name which should be applied when the container is open // closedCssClassName: indicates the CSS class name which should be applied when the container is closed // containerElementID: the id of the html element which actually holds the palettes // toggleElementID: the id of the html element which is the toggle element // lastIndex: the index of the last palette that was opened // cookieName: the name of the cookie used to store the container's last state // cookieUtils: the utility object used to set and unset cookies - default is wptheme_CookieUtils // htmlUtils: the utility object used for adding/removing css classnames - default is wptheme_HTMLElementUtils // paletteManager: the object which contains the information about the palettes to display inside the container // default is wptheme_InlinePalettes className: "wptheme_InlinePalettesContainer", debug: wptheme_DebugUtils, containerStatus: 0, //0 = closed, 1 = open openCssClassName: "wptheme-flyoutExpanded", closedCssClassName: "wptheme-flyoutCollapsed", toggleElementID: "wptheme-flyoutToggle", containerElementID: "wptheme-flyout", lastIndex: null, cookieName: "portalFlyoutIsOpen", cookieUtils: wptheme_CookieUtils, htmlUtils: wptheme_HTMLElementUtils, paletteManager: wptheme_InlinePalettes, //Main functions. init: function ( /*HTMLDocument?*/doc ) { // summary: Initializes and sets the appropriate visibilites for the container and the // palettes inside. // doc: OPTIONAL -- used when called from an iframe if ( this.debug.enabled ) { this.debug.log( this.className, "init( " + [ doc ] + ")" ); } var cookie = this.cookieUtils.getCookie( this.cookieName ); if ( cookie && cookie != "null" ) { this.containerStatus = parseInt( cookie ); } if ( this.debug.enabled ) { this.debug.log( this.className, "containerStatus is " + this.containerStatus ); } if ( this.paletteManager.paletteContextArray.length == 0 ) { this.disable(); } else { if ( this.containerStatus ) { this.paletteManager.init(); this._show(); } else { this._hide(); } this._makeVisible(); } }, toggle: function () { // summary: Toggles the container between open and closed state. if ( this.debug.enabled ) { this.debug.log( this.className, "toggle()" ); } if ( this.containerStatus ) { this.containerStatus = 0; this._hide(); } else { this.containerStatus = 1; this._show(); } }, persist: function () { // summary: Sets the cookie with the current container status. if ( this.debug.enabled ) { this.debug.log( this.className, "persist()" ); } this.cookieUtils.setCookie( this.cookieName, this.containerStatus ); if ( this.paletteManager.currentIndex == this.lastIndex ) { this.paletteManager.persist( this.lastIndex ); } }, unpersist: function () { // summary: Removes the cookie which holds the state of the flyout. if ( this.debug.enabled ) { this.debug.log( this.className, "unpersist()" ); } this.cookieUtils.deleteCookie( this.cookieName ); this.lastIndex = this.paletteManager.unpersist(); }, _makeVisible: function () { // summary: Shows the toggle element AND the container element. //Retrieve the applicable DOM elements. if ( this.debug.enabled ) { this.debug.log( this.className, "_makeVisible()" ); } var toggleElement = document.getElementById( this.toggleElementID ); toggleElement.style.visibility = 'visible'; }, disable: function () { // summary: Hides the toggle element AND the container element. //Retrieve the applicable DOM elements. if ( this.debug.enabled ) { this.debug.log( this.className, "disable()" ); } var toggleElement = document.getElementById( this.toggleElementID ); var containerElement = document.getElementById( this.containerElementID ); if (toggleElement != null) { toggleElement.style.display = 'none'; } if (containerElement != null) { containerElement.style.display = 'none'; } }, _hide: function () { //Retrieve the applicable DOM elements. if ( this.debug.enabled ) { this.debug.log( this.className, "_hide()" ); } var toggleElement = document.getElementById( this.toggleElementID ); var containerElement = document.getElementById( this.containerElementID ); if ( !toggleElement || !containerElement ) { throw Error( "Unable to retrieve the necessary markup elements! The palettes may not function correctly."); } //Closing the container. this.htmlUtils.removeClassName( toggleElement, this.openCssClassName ); this.htmlUtils.addClassName( toggleElement, this.closedCssClassName ); containerElement.style.display = 'none'; this.paletteManager.hide( document ); //Persistence cleanup. this.unpersist(); }, _show: function () { //Retrieve the applicable DOM elements. if ( this.debug.enabled ) { this.debug.log( this.className, "_show()" ); } var toggleElement = document.getElementById( this.toggleElementID ); var containerElement = document.getElementById( this.containerElementID ); if ( !toggleElement || !containerElement ) { throw Error( "Unable to retrieve the necessary markup elements! The palettes may not function correctly."); } //Opening the container. this.htmlUtils.removeClassName( toggleElement, this.closedCssClassName ); this.htmlUtils.addClassName( toggleElement, this.openCssClassName ); containerElement.style.display = 'block'; this.paletteManager.showCurrent(); //Persistence cleanup. this.persist(); } } //If we aren't inside an iframe, go ahead and register the init function so it's called on page load. This is where we check for //a palette's persistent state and handle other startup tasks. if ( top.location == self.location ) { wptheme_InlinePalettesContainer.htmlUtils.addOnload( function () { wptheme_InlinePalettesContainer.init(); } ); }; //Shows an IFRAME inside a lightbox which blocks access to the page. var wptheme_IFrameLightbox = function ( /*String*/disabledBackgroundClassname, /*String*/borderBoxClassname, /*String*/closeLinkClassname, /*String*/closeString ) { // summary: Creates a "lightbox" effect where a partially opaque div is set to cover the entire viewable area of the browser and the content // is displayed in an iframe in approximately the middle of the viewable area. // description: Creates a div the size of the viewable area of the browser which is styled using the given "disabledBackgroundClassname". The iframe is // displayed inside another div which is approximately centered and styled according to the given "borderBoxClassname". The content of the iframe is // set using the "setURL" function. The "lightbox" is closed via a text anchor link which is positioned above the top right edge of the border box. The // text displayed is controlled using the "closeString" parameter and the link is styled according to the "closeLinkClassname". // disabledBackgroundClassname: the CSS class name to apply to the background div displayed when the lightbox is showing // borderBoxClassname: the CSS class name to apply to the border box in the center of the page // closeString: the string which will be displayed as the link to close the lightbox this.className = "wptheme_IFrameLightbox"; //Declare this here so that any dependency error (e.g. wptheme_HTMLElementUtils not yet being defined) //is clear from the beginning (throws an error at construction time instead of runtime). Also, allows //for easy substitution of alternate implementations (as long as function names & signatures are the same). this._htmlUtils = wptheme_HTMLElementUtils; this._debugUtils = wptheme_DebugUtils; this._initialized = false; this.showing = false; var uniquePrefix = this._htmlUtils.getUniqueId(); this._backgroundDivId = uniquePrefix + "_lightboxPageBackgroundDiv"; this._borderDivId = uniquePrefix + "_lightboxBorderDiv"; this._closeLinkId = uniquePrefix + "_lightboxCloseLink"; this._iframeId = uniquePrefix + "_lightboxIframe"; // **************************************************************** // * Dynamically created DOM elements. // **************************************************************** function createDiv(idStr, className, parent ) { // summary: Creates a div with the given ID, class, and appends to the given parent node. The display property is set to none by default. var div = document.createElement( "DIV" ); div.id = idStr; div.className = className; div.style.display = "none"; parent.appendChild( div ); return div; } var me = this; function createLink(idStr, className, text, parent) { // summary: Creates a link with the given ID, class, textContent, and appends it to the given parent node. The display property is set to none // by default. The onclick is set to hide the lightbox. var a = document.createElement( "A" ); a.id = idStr; a.className = className; a.href = "javascript:void(0);"; a.onclick = function () { me.hide() }; a.style.display = "none"; a.appendChild( document.createTextNode( text ) ); parent.appendChild( a ); return a; } function createIFrame( idStr, parent ) { // summary: Creates an iframe with the given ID (also used for the name) and appends it to the given parent node. var iframe = document.createElement( "IFRAME" ); iframe.name = idStr; iframe.id = idStr; //iframe.style.display = "none"; parent.appendChild( iframe ); return iframe; } // **************************************************************** // * Initialization. // **************************************************************** this._init = function () { this._initialized = true; //Create the background div. createDiv( this._backgroundDivId, disabledBackgroundClassname, document.body ); //Create the border box div createIFrame( this._iframeId, createDiv( this._borderDivId, borderBoxClassname, document.body )); //Create the close link. createLink( this._closeLinkId, closeLinkClassname, closeString, document.body ); } // **************************************************************** // * Handling the browser scrolling and resizing dynamically. // **************************************************************** //Make sure to call any existing onscroll handler. var oldScrollFunc = window.onscroll; window.onscroll = function (e) { if ( me.showing ) { me.sizeAndPositionBorderBox(); //me.sizeBackgroundDisablingDiv(); } if ( oldScrollFunc ) { if (e) { oldScrollFunc(e); } else { oldScrollFunc(); } } } //Make sure to call any existing onresize handler. var oldResizeFunc = window.onresize; window.onresize = function (e) { if ( me.showing ) { me.sizeAndPositionBorderBox(); me.sizeBackgroundDisablingDiv(); } if ( oldResizeFunc ) { if (e) { oldResizeFunc(e); } else { oldResizeFunc(); } } } // **************************************************************** // * Main functions for use in the theme. // **************************************************************** this.setURL = function ( /*String*/url ) { // summary: Sets the URL displayed by the IFRAME in the lightbox. // url: the url to the resource to display window.frames[this._iframeId].location = url; } this.show = function ( /*String?*/url ) { // summary: Shows the lightbox above the disabled background div. // url: OPTIONAL -- the url to display in the iframe in the center of the screen if ( !this._initialized ) { this._init(); } this.showing = true; this.disableBackground(); this.showBorderBox(); if ( url ) { this.setURL( url ); } } this.hide = function() { // summary: Hides the lightbox and the disabled background div. if ( !this._initialized ) { this._init(); } this.showing = false; this.enableBackground(); this.hideBorderBox(); } // **************************************************************** // * Content border box // **************************************************************** this.showBorderBox = function () { // summary: Shows and positions the border box which contains the IFRAME. var div = document.getElementById( this._borderDivId ); div.style.display = "block"; var link = document.getElementById( this._closeLinkId ); link.style.display = "block"; this.sizeAndPositionBorderBox(); } this.sizeAndPositionBorderBox = function () { // summary: Sizes and positions the border box which contains the IFRAME. var div = document.getElementById( this._borderDivId ); this._htmlUtils.sizeRelativeToViewableArea( div, 0.60, 0.75 ); this._htmlUtils.positionRelativeToViewableArea( div, 0.20, 0.12 ); var link = document.getElementById( this._closeLinkId ); this._htmlUtils.positionOutsideElementTopRight( link, div ); } this.hideBorderBox = function () { // summary: hides the border box and IFRAME. document.getElementById( this._borderDivId ).style.display = "none"; document.getElementById( this._closeLinkId ).style.display = "none"; } // **************************************************************** // * Transparent background controls // **************************************************************** this.disableBackground = function () { // summary: Disables the background by laying a transparent div over top of the document body. var div = document.getElementById( this._backgroundDivId ); div.style.display = "block"; this.sizeBackgroundDisablingDiv(); this._htmlUtils.hideElementsByTagName( "select" ); } this.sizeBackgroundDisablingDiv = function () { // summary: Sizes the transparent div appropriately. var div = document.getElementById( this._backgroundDivId ); //dynamically size the div to the inner browser window this._htmlUtils.sizeToEntireArea( div ); } this.enableBackground=function () { // summary: Enables the background by hiding the overlaid div. this._htmlUtils.showElementsByTagName( "select" ); document.getElementById( this._backgroundDivId ).style.display = "none"; } }; delete djConfig.baseUrl;