Ext.namespace("OOD.config","OOD.org","OOD.util.form","OOD.util.cookie","OOD.util.array","OOD.util.url","OOD.util.image","OOD.url","OOD.mailbox","OOD.nav","OOD.navMenu","OOD.messages","OOD.instance","OOD.settings");OOD.lightBox=function(url,title,userConfig)
{var config={width:500,height:500}
for(i in userConfig){config[i]=userConfig[i];}
var center=new Ext.Panel({region:"center",body:new Ext.ux.ManagedIFrame({autoCreate:{src:url,frameBorder:0,cls:"x-panel-body"}})});var win=new Ext.Window({closable:true,width:config.width,height:config.height,modal:false,minimizable:false,border:false,plain:true,layout:"border",title:title,defaults:{autoScroll:true},buttons:[{text:"Close",handler:function(){win.hide();}}],items:[center]});win.on("minimize",function(){win.toggleCollapse();});win.show(this);}
OOD.util.form.toggleCheckBoxes=function(checkboxObj,nameSearch,parentClass)
{if(!parentClass){parentClass="row";}
var checkValue=checkboxObj.checked;Ext.select('input[@name*="'+nameSearch+'"]').each(function(el,ref,index)
{var dom=el.dom;if(dom.type=="checkbox"&&!dom.disabled)
{dom.checked=checkValue;OOD.util.form.checkHighlight(dom,parentClass);}});}
OOD.util.form.checkHighlight=function(checkboxObj,className)
{var parent=checkboxObj.parentNode;for(i=1;i<=5;i++)
{if(parent)
{if(Ext.get(parent).hasClass(className)){break;}}
parent=parent.parentNode;}
if(checkboxObj.checked){Ext.get(parent).addClass("highlight");}
else{Ext.get(parent).removeClass("highlight");}}
OOD.util.form.focusFirst=function()
{var form=document.forms[0];if(form)
{for(i=0;i<form.elements.length;i++)
{if(form.elements[i].type=="text"&&form.elements[i].style.display!="none"&&form.elements[i].disabled==false)
{form.elements[i].focus();break;}}}}
OOD.util.form.setOptions=function(element,options)
{if(typeof element=="string"){element=Ext.get(element);}
Ext.get(element).select("optgroup, option").remove();var appendStr="";for(i in options)
{var value=options[i];if(value instanceof Object)
{appendStr+='<optgroup label="'+i+'">';for(j in value){appendStr+='<option value="'+j+'">'+value[j]+'</option>';}
appendStr+="</optgroup>";}
else{appendStr+='<option value="'+i+'">'+value+'</option>';}}
Ext.DomHelper.append(element,appendStr);}
OOD.util.form.confirmAction=function(actionVal,confirmText)
{if(confirm(confirmText))
{document.forms[0].action=actionVal;OOD.util.form.submit();}}
OOD.util.form.setValue=function(varName,varValue)
{document.forms[0].elements[varName].value=varValue;}
OOD.util.form.submit=function()
{document.forms[0].submit();}
OOD.util.form.setAction=function(actionVal)
{document.forms[0].action.value=actionVal;}
OOD.util.form.getRadio=function(radioObj){if(!radioObj)
return"";var radioLength=radioObj.length;if(radioLength==undefined)
if(radioObj.checked)
return radioObj.value;else
return"";for(var i=0;i<radioLength;i++){if(radioObj[i].checked){return radioObj[i].value;}}
return"";}
OOD.util.form.setRadio=function(radioObj,newValue){if(!radioObj)
return;var radioLength=radioObj.length;if(radioLength==undefined){radioObj.checked=(radioObj.value==newValue.toString());return;}
for(var i=0;i<radioLength;i++){radioObj[i].checked=false;if(radioObj[i].value==newValue.toString()){radioObj[i].checked=true;}}}
OOD.util.cookie.set=function(name,value,days)
{var expires="";if(days)
{var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));expires="; expires="+date.toGMTString();}
document.cookie=name+"="+value+expires+"; path=/";}
OOD.util.cookie.get=function(name)
{var nameEQ=name+"=";var ca=document.cookie.split(';');for(var i=0;i<ca.length;i++)
{var c=ca[i];while(c.charAt(0)==' ')
{c=c.substring(1,c.length);if(c.indexOf(nameEQ)==0){return c.substring(nameEQ.length,c.length);}}}
return null;}
OOD.util.cookie.erase=function(name)
{createCookie(name,"",-1);}
OOD.util.array.search=function(array,needle)
{for(var i=0;i<array.length;i++)
{if(this[i]==needle){return true;}}
return false;}
OOD.nav=function()
{var animSpeed=0.5;var grpIDs=[];return{init:function()
{Ext.select("a.groupName").each(function(el){var ID=el.dom.id;grpIDs.push(ID);Ext.get(ID).on("click",OOD.nav.toggleDisplay);});},toggleDisplay:function(e)
{var ID=this.id.replace(new RegExp("_grp"),"");var height=parseInt(Ext.get(ID).getAttributeNS("nav","height"));var parentID=ID.replace(new RegExp("_[0-9]+$"),"");var subMenu=(new RegExp("[0-9]+")).test(parentID)?true:false;var parentHeight;if(subMenu)
{parentHeight=parseInt(Ext.get(parentID).getAttributeNS("nav","height"));}
if(Ext.get(ID).hasClass("closed"))
{OOD.util.cookie.set(ID,1);Ext.get(ID).removeClass("closed");var counter=1;var prefix=ID.replace(new RegExp("(.*_)[0-9]+$"),"$1");var siblingID;parentHeight+=height;while(true)
{if(subMenu){break;}
siblingID=prefix+counter++;if(!OOD.util.array.search(grpIDs,siblingID)){break;}
if(!Ext.get(siblingID).hasClass("closed")&&siblingID!=ID)
{OOD.nav.hide(siblingID);parentHeight-=parseInt(Ext.get(ID).getAttributeNS("nav","height"));}}
var attributes={height:{from:0,to:height}};Ext.get(ID).animate(attributes,animSpeed);}
else
{OOD.util.cookie.set(ID,0);OOD.nav.hide(ID);parentHeight-=height;}
if(subMenu)
{OOD.nav.animateParent(parentID,parentHeight);}},animateParent:function(parentID,parentHeight)
{var attributes={height:{to:parentHeight}};Ext.get(parentID).animate(attributes,animSpeed);Ext.get(parentID).setStyle("height",parentHeight);},hide:function(ID)
{Ext.get(ID).addClass("closed");var attributes={height:{to:0}};Ext.get(ID).animate(attributes,animSpeed);}};}();OOD.listingEffects={init:function()
{Ext.select(".listing thead td.link, tbody tr.link").on("mouseover",OOD.listingEffects.mouseOver);Ext.select(".listing thead td.link, tbody tr.link").on("mouseout",OOD.listingEffects.mouseOut);Ext.select(".listing tbody input[@type='checkbox']").on("click",OOD.listingEffects.checkHighlight);},checkHighlight:function()
{Ext.EventObject.stopPropagation();OOD.util.form.checkHighlight(this,"row");},mouseOver:function(e)
{Ext.get(this).addClass("mouseover");},mouseOut:function(e)
{Ext.get(this).removeClass("mouseover");}}
OOD.listing={config:{search:true,sFieldName:"sField",sValueName:"sValue",action:"list",formName:"listingForm",dataID:"listingData"},timeout:null,init:function(userConfig)
{for(i in userConfig){this.config[i]=userConfig[i];}
this.initListeners();OOD.listingEffects.init();},initListeners:function()
{if(this.config.search)
{Ext.get(this.config.sFieldName).on("change",this.searchStart,this,true);Ext.get(this.config.sValueName).on("keydown",this.searchStart,this,true);}},searchStart:function()
{var instance=this;if(this.timeout){window.clearTimeout(this.timeout);}
this.timeout=window.setTimeout(function(){instance.doSearch();},200);},doSearch:function()
{var parsedURI,searchField,searchValue,url;parsedURI=OOD.util.url.parse();searchField=document.forms[this.config.formName][this.config.sFieldName].value;searchValue=document.forms[this.config.formName][this.config.sValueName].value;url="/"+Zend.MVC.controller+"/"+this.config.action;url=OOD.util.url.appendQuery(url,this.config.sFieldName,searchField);url=OOD.util.url.appendQuery(url,this.config.sValueName,searchValue);if(parsedURI.query)
{var matches;if(matches=(new RegExp("sort%5B[0-9A-Z_]+%5D=[^&]+","gi")).exec(parsedURI.query)){for(var i=0;i<matches.length;i++){url=OOD.util.url.appendQuery(url,matches[i]);}}}
if(this.config.query){var query=this.config.query;for(var i=0;i<query.length;i++){url=OOD.util.url.appendQuery(url,query[i],Zend.MVC.params[query[i]]);}}
if(this.config.form){var form=this.config.form;for(var i=0;i<form.length;i++){url=OOD.util.url.appendQuery(url,form[i],document.forms[this.config.formName][form[i]].value);}}
Ext.Ajax.request({url:url,success:this.handleSuccess,scope:this});},handleSuccess:function(obj)
{Ext.get(this.config.dataID).update(obj.responseText);OOD.listingEffects.init();},getSearchURL:function(url)
{if(this.config.search)
{var searchField=document.forms[this.config.formName][this.config.sFieldName].value;var searchValue=document.forms[this.config.formName][this.config.sValueName].value;if(url.match(new RegExp(this.config.sFieldName))){url=url.replace(new RegExp(this.config.sFieldName+"=[^&]*"),this.config.sFieldName+"="+searchField);}
else{url=OOD.util.url.appendQuery(url,this.config.sFieldName,searchField);}
if(url.match(new RegExp(this.config.sValueName))){url=url.replace(new RegExp(this.config.sValueName+"=[^&]*"),this.config.sValueName+"="+searchValue);}
else{url=OOD.util.url.appendQuery(url,this.config.sValueName,searchValue);}}
if(this.config.query){var query=this.config.query;for(var i=0;i<query.length;i++){url=OOD.util.url.appendQuery(url,query[i],Zend.MVC.params[query[i]]);}}
if(this.config.form){var form=this.config.form;for(var i=0;i<form.length;i++){url=OOD.util.url.appendQuery(url,form[i],document.forms[this.config.formName][form[i]].value);}}
return url;},goTo:function(url)
{location=this.getSearchURL(url);},redirect:function(url)
{location=OOD.util.url.appendQuery(url,"httpReferrer",this.getSearchURL(OOD.util.url.parse().relative));}}
OOD.messages.show=function(text)
{var alignTo=OOD.messages.alignTo||document.body;if(Ext.type(text)=="array"){text=text.join("<br />");}
Ext.DomHelper.append(document.body,"<div id='messages'>"+text+"</div>",true).alignTo(alignTo,"t-t").slideIn("t").pause(1.5).ghost("t",{remove:true});}
OOD.messages.loading=function(userConfig)
{config={msg:"",align:document.body,position:"c",id:"waitMessage",cls:""}
for(i in userConfig){config[i]=userConfig[i];}
Ext.DomHelper.append(document.body,"<div id='"+config.id+"' class='"+config.cls+"'>"+config.msg+"</div>",true).alignTo(config.align,config.position);}
OOD.messages.initloading=function()
{Ext.select(".showloading").on("click",function()
{var instance=this;window.setTimeout(function(){Ext.get(instance).replaceWith({tag:"span",html:"&nbsp;",cls:"loading"});},100);});}
OOD.util.url.parse=function(str)
{if(!str){str=window.location;}
var options={strictMode:false,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};var o=options,m=o.parser[o.strictMode?"strict":"loose"].exec(str),uri={},i=14;while(i--)uri[o.key[i]]=m[i]||"";uri[o.q.name]={};uri[o.key[12]].replace(o.q.parser,function($0,$1,$2){if($1)uri[o.q.name][$1]=$2;});return uri;}
OOD.util.url.appendQuery=function(url,key,value)
{var query="";if(Ext.type(key)=="object")
{for(i in key){query+=i+"="+OOD.util.url.Encode(key[i]);}}
else if(value==null){query=key;}
else{query=key+"="+OOD.util.url.Encode(value);}
if(url.match(/\?/gi)){url+="&"+query}
else{url+="?"+query;}
return url;}
OOD.util.url.Encode=function(plaintext)
{if(plaintext==null){return;}
var SAFECHARS="0123456789"+"ABCDEFGHIJKLMNOPQRSTUVWXYZ"+"abcdefghijklmnopqrstuvwxyz"+"-_.!~*'()";var HEX="0123456789ABCDEF";var encoded="";for(var i=0;i<plaintext.length;i++)
{var ch=plaintext.charAt(i);if(ch==" "){encoded+="+";}
else if(SAFECHARS.indexOf(ch)!=-1){encoded+=ch;}
else{var charCode=ch.charCodeAt(0);if(charCode>255){encoded+="+";}
else{encoded+="%";encoded+=HEX.charAt((charCode>>4)&0xF);encoded+=HEX.charAt(charCode&0xF);}}}
return encoded;}
OOD.util.image.preload=function(images)
{if(Ext.typeimages=="string"){images=[images];}
for(i=0;i<images.length;i++){var image=new Image();image.src=images[i];}}
OOD.navMenu.init=function(menuID)
{Ext.get(menuID).select(".link").addClassOnOver("hvr");}