/**
 * Copyright 2005 Darren L. Spurgeon
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * NOTICE: Optimizado para reducir su tamaņo. Original: http://ajaxtags.sourceforge.net/
 */

var AjaxJspTag={
Version: '1.2'}
AJAX_DEFAULT_PARAMETER="ajaxParameter"
AJAX_PORTLET_MAX=1
AJAX_PORTLET_MIN=2
AJAX_PORTLET_CLOSE=3
AJAX_CALLOUT_OVERLIB_DEFAULT="STICKY,"
+"CLOSECLICK,"
+"DELAY,250,"
+"TIMEOUT,5000,"
+"VAUTO,WRAPMAX,240,"
+"CSSCLASS,FGCLASS,'olfg',BGCLASS,'olbg',CGCLASS,'olcg',"
+"CAPTIONFONTCLASS,'olcap',CLOSEFONTCLASS,'olclo',TEXTFONTCLASS,'oltxt'"
function isAlien(a){
return isObject(a)&&typeof a.constructor !='function'}
function isArray(a){
return isObject(a)&&a.constructor==Array}
function isBoolean(a){
return typeof a=='boolean'}
function isEmpty(o){
var i,v
if(isObject(o)){
for(i in o){
v=o[i]
if(isUndefined(v)&&isFunction(v)){
return false}}}
return true}
function isFunction(a){
return typeof a=='function'}
function isNull(a){
return typeof a=='object'&&!a}
function isNumber(a){
return typeof a=='number'&&isFinite(a)}
function isObject(a){
return(a&&typeof a=='object')|| isFunction(a)}
function isString(a){
return typeof a=='string'}
function isUndefined(a){
return typeof a=='undefined'}
function addOnLoadEvent(func){
var oldonload=window.onload
if(typeof window.onload !='function'){
window.onload=func
}else{
window.onload=function(){
oldonload()
func()}}}
function extractQueryString(url){
var ret=(url.indexOf('?')>=0&&url.indexOf('?')<(url.length-1))
? url.substr(url.indexOf('?')+1)
: ''
return ret}
function trimQueryString(url){
var ret=url.indexOf('?')>=0
? url.substring(0,url.indexOf('?'))
: url
return ret}
function delimitQueryString(qs){
var ret=''
if(qs.length>0){
var params=qs.split('&')
for(var i=0;i<params.length;i++){
if(i>0)ret+=','
ret+=params[i]}}
return ret}
function buildParameterString(parameterList){
var returnString=''
var params=(parameterList || '').split(',')
if(params !=null){
for(var p=0;p<params.length;p++){
var pair=params[p].split('=')
var key=pair[0]
var val=pair[1]
if(!isEmpty(val)|| isString(val)){
var varList=val.match(new RegExp("\\{[\\w\\.\\(\\)\\[\\]]*\\}",'g'))
if(!isNull(varList)){
var field=$(varList[0].substring(1,varList[0].length-1))
switch(field.type){
case 'checkbox':
case 'radio':
case 'text':
case 'textarea':
case 'password':
case 'hidden':
case 'select-one':
returnString+='&'+key+'='+encodeURIComponent(field.value)
break
case 'select-multiple':
var fieldValue=$F(varList[0].substring(1,varList[0].length-1))
for(var i=0;i<fieldValue.length;i++){
returnString+='&'+key+'='+encodeURIComponent(fieldValue[i])}
break
default:
returnString+='&'+key+'='+encodeURIComponent(field.innerHTML)
break}
}else{
returnString+='&'+key+'='+encodeURIComponent(val)}}}}
if(returnString.charAt(0)=='&'){
returnString=returnString.substr(1)}
return returnString}
function getElementsByClassName(node,className){
var children=node.getElementsByTagName('*')
var elements=new Array()
for(var i=0;i<children.length;i++){
var child=children[i]
var classNames=child.className.split(' ')
for(var j=0;j<classNames.length;j++){
if(classNames[j]==className){
elements.push(child)
break}}}
return elements}
function evalBoolean(value,defaultValue){
if(!isNull(value)&&isString(value)){
return("true"==value.toLowerCase()|| "yes"==value.toLowerCase())? "true" : "false"
}else{
return defaultValue==true ? "true" : "false"}}
function getExpDate(days,hours,minutes){
var expDate=new Date()
if(typeof days=="number"&&typeof hours=="number"&&typeof hours=="number"){
expDate.setDate(expDate.getDate()+parseInt(days))
expDate.setHours(expDate.getHours()+parseInt(hours))
expDate.setMinutes(expDate.getMinutes()+parseInt(minutes))
return expDate.toGMTString()}}
function getCookieVal(offset){
var endstr=document.cookie.indexOf(";",offset)
if(endstr==-1){
endstr=document.cookie.length}
return unescape(document.cookie.substring(offset,endstr))}
function getCookie(name){
var arg=name+"="
var alen=arg.length
var clen=document.cookie.length
var i=0
while(i<clen){
var j=i+alen
if(document.cookie.substring(i,j)==arg){
return getCookieVal(j)}
i=document.cookie.indexOf(" ",i)+1
if(i==0)break}
return null}
function setCookie(name,value,expires,path,domain,secure){
document.cookie=name+"="+escape(value)+
((expires)? "; expires="+expires : "")+
((path)? "; path="+path : "")+
((domain)? "; domain="+domain : "")+
((secure)? "; secure" : "")}
function deleteCookie(name,path,domain){
if(getCookie(name)){
document.cookie=name+"="+
((path)? "; path="+path : "")+
((domain)? "; domain="+domain : "")+
"; expires=Thu, 01-Jan-70 00:00:01 GMT"}}
AbstractResponseParser=function(){}
ResponseTextParser=Class.create()
ResponseTextParser.prototype=Object.extend(new AbstractResponseParser(),{
initialize: function(){
this.type="text"
},
load: function(request){
this.content=request.responseText
this.split()
},
split: function(){
this.itemList=new Array()
var lines=this.content.split('\n')
for(var i=0;i<lines.length;i++){
this.itemList.push(lines[i].split(','))}}
})
ResponseXmlParser=Class.create()
ResponseXmlParser.prototype=Object.extend(new AbstractResponseParser(),{
initialize: function(){
this.type="xml"
},
load: function(request){
this.content=request.responseXML
this.parse()
},
parse: function(){
var root=this.content.documentElement
var responseNodes=root.getElementsByTagName("response")
this.itemList=new Array()
if(responseNodes.length>0){
var responseNode=responseNodes[0]
var itemNodes=responseNode.getElementsByTagName("item")
for(var i=0;i<itemNodes.length;i++){
var nameNodes=itemNodes[i].getElementsByTagName("name")
var valueNodes=itemNodes[i].getElementsByTagName("value")
if(nameNodes.length>0&&valueNodes.length>0){
var name=nameNodes[0].firstChild.nodeValue
var value=valueNodes[0].firstChild.nodeValue
this.itemList.push(new Array(name,value))}}}}
})
ResponseHtmlParser=Class.create()
ResponseHtmlParser.prototype=Object.extend(new AbstractResponseParser(),{
initialize: function(){
this.type="html"
},
load: function(request){
this.content=request.responseText}
})
ResponseXmlToHtmlParser=Class.create()
ResponseXmlToHtmlParser.prototype=Object.extend(new AbstractResponseParser(),{
initialize: function(){
this.type="xmltohtml"
},
load: function(request){
this.xml=request.responseXML
this.parse()
},
parse: function(){
this.content=''
var root=this.xml.documentElement
var responseNodes=root.getElementsByTagName("response")
if(responseNodes.length>0){
var responseNode=responseNodes[0]
var itemNodes=responseNode.getElementsByTagName("item")
for(var i=0;i<itemNodes.length;i++){
var nameNodes=itemNodes[i].getElementsByTagName("name")
var valueNodes=itemNodes[i].getElementsByTagName("value")
if(nameNodes.length>0&&valueNodes.length>0){
var name=nameNodes[0].firstChild.nodeValue
var value=valueNodes[0].firstChild.nodeValue
this.content+='<h1>'+name+'</h1>'
this.content+='<div>'+value+'</div>'}}}}
})
ResponseXmlToHtmlListParser=Class.create()
ResponseXmlToHtmlListParser.prototype=Object.extend(new AbstractResponseParser(),{
initialize: function(){
this.type="xmltohtmllist"
},
load: function(request){
this.xml=request.responseXML
this.parse()
},
parse: function(){
var ul='<ul>'
var root=this.xml.documentElement
var responseNodes=root.getElementsByTagName("response")
if(responseNodes.length>0){
var responseNode=responseNodes[0]
var itemNodes=responseNode.getElementsByTagName("item")
for(var i=0;i<itemNodes.length;i++){
var nameNodes=itemNodes[i].getElementsByTagName("name")
var valueNodes=itemNodes[i].getElementsByTagName("value")
if(nameNodes.length>0&&valueNodes.length>0){
var name=nameNodes[0].firstChild.nodeValue
var value=valueNodes[0].firstChild.nodeValue
ul+='<li id="'+value+'">'+name+'</li>'}}}
ul+='</ul>'
this.content=ul}
})
AjaxJspTag.Base=function(){}
AjaxJspTag.Base.prototype={
resolveParameters: function(){
var qs=delimitQueryString(extractQueryString(this.url))
if(this.options.parameters){
this.options.parameters+=','+qs
}else{
this.options.parameters=qs}
this.url=trimQueryString(this.url)
if(this.options.parameters.length>0
&&this.options.parameters.charAt(this.options.parameters.length-1)==','){
this.options.parameters=this.options.parameters.substr(0,this.options.parameters.length-1)}}}
AjaxJspTag.UpdateField=Class.create()
AjaxJspTag.UpdateField.prototype=Object.extend(new AjaxJspTag.Base(),{
initialize: function(url,options){
this.url=url
this.setOptions(options)
this.setListeners()
},
setOptions: function(options){
this.options=Object.extend({
parameters: options.parameters || '',
eventType: options.eventType ? options.eventType : "click",
parser: options.parser ? options.parser : new ResponseTextParser(),
handler: options.handler ? options.handler : this.handler
},options ||{})
},
setListeners: function(){
eval("$(this.options.action).on"+this.options.eventType+" = this.execute.bindAsEventListener(this)")
},
execute: function(e){
if(this.options.preFunction !=null)this.options.preFunction()
var params=buildParameterString(this.options.parameters)
var targetList=this.options.target.split(',')
var obj=this
var setFunc=this.setField
var aj=new Ajax.Request(this.url,{
asynchronous: true,
method: 'get',
evalScripts: true,
parameters: params,
onSuccess: function(request){
obj.options.parser.load(request)
var results=obj.options.parser.itemList
obj.options.handler(request,{targets: targetList,items: results})
},
onFailure: function(request){
if(obj.options.errorFunction !=null)obj.options.errorFunction(request)
},
onComplete: function(request){
if(obj.options.postFunction !=null)obj.options.postFunction(request)}
})
},
handler: function(request,options){
for(var i=0;i<options.targets.length&&i<options.items.length;i++){
$(options.targets[i]).value=options.items[i][1]}}
})
AjaxJspTag.Select=Class.create()
AjaxJspTag.Select.prototype=Object.extend(new AjaxJspTag.Base(),{
initialize: function(url,options){
this.url=url
this.setOptions(options)
this.setListeners()
if(this.options.executeOnLoad=="true"){
this.execute()}
},
setOptions: function(options){
this.options=Object.extend({
parameters: options.parameters || '',
eventType: options.eventType ? options.eventType : "change",
parser: options.parser ? options.parser : new ResponseXmlParser(),
handler: options.handler ? options.handler : this.handler
},options ||{})
},
setListeners: function(){
Event.observe($(this.options.source),
this.options.eventType,
this.execute.bindAsEventListener(this),
false)
eval("$(this.options.source).on"+this.options.eventType+" = function(){return false;};")
},
execute: function(e){
if(this.options.preFunction !=null)this.options.preFunction()
var params=buildParameterString(this.options.parameters)
var obj=this
var aj=new Ajax.Request(this.url,{
asynchronous: true,
method: 'get',
evalScripts: true,
parameters: params,
onSuccess: function(request){
obj.options.parser.load(request)
var results=obj.options.parser.itemList
obj.options.handler(request,{target: obj.options.target,
items: results,
defaultOptions: obj.options.defaultOptions})
},
onFailure: function(request){
if(obj.options.errorFunction !=null)obj.options.errorFunction(request)
},
onComplete: function(request){
if(obj.options.postFunction !=null)obj.options.postFunction(request)}
})
},
handler: function(request,options){
var defaultSelectedValues=(options.defaultOptions || '').split(",")
$(options.target).options.length=0
$(options.target).disabled=false
for(var i=0;i<options.items.length;i++){
var newOption=new Option(options.items[i][0],options.items[i][1])
for(j=0;j<defaultSelectedValues.length&&newOption.selected==false;j++){
if(defaultSelectedValues[j]==options.items[i][1]){
newOption.selected=true}}
$(options.target).options[i]=newOption}}
})
AjaxJspTag.HtmlContent=Class.create()
AjaxJspTag.HtmlContent.prototype=Object.extend(new AjaxJspTag.Base(),{
initialize: function(url,options){
this.url=url
this.setOptions(options)
this.setListeners()
},
setOptions: function(options){
this.options=Object.extend({
parameterName: options.parameterName ? options.parameterName : AJAX_DEFAULT_PARAMETER,
parameters: options.parameters || '',
eventType: options.eventType ? options.eventType : "click",
parser: options.parser ? options.parser : new ResponseHtmlParser(),
handler: options.handler ? options.handler : this.handler
},options ||{})
},
setListeners: function(){
if(this.options.source){
eval("$(this.options.source).on"+this.options.eventType+" = this.execute.bindAsEventListener(this)")
}else if(this.options.sourceClass){
var elementArray=document.getElementsByClassName(this.options.sourceClass)
for(var i=0;i<elementArray.length;i++){
eval("elementArray[i].on"+this.options.eventType+" = this.execute.bindAsEventListener(this)")}}
},
execute: function(e){
if(this.options.preFunction !=null)this.options.preFunction()
var ajaxParameters=this.options.parameters
if(this.options.sourceClass){
var re=new RegExp("(\\{"+this.options.parameterName+"\\})",'g')
var elem=Event.element(e)
if(elem.type){
ajaxParameters=ajaxParameters.replace(re,$F(elem))
}else{
ajaxParameters=ajaxParameters.replace(re,elem.innerHTML)}}
var params=buildParameterString(ajaxParameters)
var obj=this
var aj=new Ajax.Updater(this.options.target,this.url,{
asynchronous: true,
method: 'get',
evalScripts: true,
parameters: params,
onFailure: function(request){
if(obj.options.errorFunction !=null)obj.options.errorFunction(request)
},
onComplete: function(request){
if(obj.options.postFunction !=null)obj.options.postFunction(request)}
})}
})
AjaxJspTag.TabPanel=Class.create()
AjaxJspTag.TabPanel.prototype=Object.extend(new AjaxJspTag.Base(),{
initialize: function(url,options){
this.url=url
this.setOptions(options)
this.execute()
},
setOptions: function(options){
this.options=Object.extend({
parameters: options.parameters || '',
eventType: options.eventType ? options.eventType : "click",
parser: options.parser ? options.parser : new ResponseHtmlParser(),
handler: options.handler ? options.handler : this.handler
},options ||{})
},
execute: function(e){
if(this.options.preFunction !=null)this.options.preFunction()
this.resolveParameters()
var params=buildParameterString(this.options.parameters)
var obj=this
var aj=new Ajax.Updater(this.options.target,this.url,{
asynchronous: true,
method: 'get',
evalScripts: true,
parameters: params,
onSuccess: function(request){
var src
if(obj.options.source){
src=obj.options.source
}else{
src=document.getElementsByClassName(obj.options.currentStyleClass,
$(obj.options.panelStyleId))[0]}
obj.options.handler(request,{source: src,
panelStyleId: obj.options.panelStyleId,
currentStyleClass: obj.options.currentStyleClass})
},
onFailure: function(request){
if(obj.options.errorFunction !=null)obj.options.errorFunction(request)
},
onComplete: function(request){
if(obj.options.postFunction !=null)obj.options.postFunction(request)}
})
},
handler: function(request,options){
var cur=document.getElementsByClassName(options.currentStyleClass,$(options.panelStyleId))
cur[0].className=''
options.source.className=options.currentStyleClass}
})
AjaxJspTag.Portlet=Class.create()
AjaxJspTag.Portlet.prototype=Object.extend(new AjaxJspTag.Base(),{
initialize: function(url,options){
this.url=url
this.setOptions(options)
this.setListeners()
if(this.options.executeOnLoad=="true"){
this.execute()}
if(this.preserveState)this.checkCookie()
},
setOptions: function(options){
this.options=Object.extend({
parameters: options.parameters || '',
target: options.source+"Content",
close: options.source+"Close",
refresh: options.source+"Refresh",
toggle: options.source+"Size",
isMaximized: true,
expireDays: options.expireDays || "0",
expireHours: options.expireHours || "0",
expireMinutes: options.expireMinutes || "0",
executeOnLoad: evalBoolean(options.executeOnLoad,true),
refreshPeriod: options.refreshPeriod || null,
eventType: options.eventType ? options.eventType : "click",
parser: options.parser ? options.parser : new ResponseHtmlParser(),
handler: options.handler ? options.handler : this.handler
},options ||{})
if(parseInt(this.options.expireDays)>0
|| parseInt(this.options.expireHours)>0
|| parseInt(this.options.expireMinutes)>0){
this.preserveState=true
this.options.expireDate=getExpDate(
parseInt(this.options.expireDays),
parseInt(this.options.expireHours),
parseInt(this.options.expireMinutes))}
this.isAutoRefreshSet=false
},
setListeners: function(){
if(this.options.imageClose){
eval("$(this.options.close).on"+this.options.eventType+" = this.closePortlet.bindAsEventListener(this)")}
if(this.options.imageRefresh){
eval("$(this.options.refresh).on"+this.options.eventType+" = this.refreshPortlet.bindAsEventListener(this)")}
if(this.options.imageMaximize&&this.options.imageMinimize){
eval("$(this.options.toggle).on"+this.options.eventType+" = this.togglePortlet.bindAsEventListener(this)")}
},
execute: function(e){
if(this.options.preFunction !=null)this.options.preFunction()
this.resolveParameters()
var params=buildParameterString(this.options.parameters)
var obj=this
if(this.options.refreshPeriod&&this.isAutoRefreshSet==false){
var freq=this.options.refreshPeriod
this.ajaxPeriodicalUpdater=new Ajax.PeriodicalUpdater(this.options.target,this.url,{
asynchronous: true,
method: 'get',
evalScripts: true,
parameters: params,
frequency: freq,
onFailure: function(request){
if(obj.options.errorFunction !=null)obj.options.errorFunction(request)
},
onComplete: function(request){},
onSuccess: function(request){
if(obj.options.postFunction !=null)obj.options.postFunction(request)}
})
this.isAutoRefreshSet=true
}else{
this.ajaxUpdater=new Ajax.Updater(this.options.target,this.url,{
asynchronous: true,
method: 'get',
parameters: params,
evalScripts: true,
onFailure: function(request){
if(obj.options.errorFunction !=null)obj.options.errorFunction(request)
},
onComplete: function(request){
if(obj.options.postFunction !=null)obj.options.postFunction(request)}
})}
},
checkCookie: function(){
var cVal=getCookie("AjaxJspTag.Portlet."+this.options.source)
if(cVal !=null){
if(cVal==AJAX_PORTLET_MIN){
this.togglePortlet()
}else if(cVal==AJAX_PORTLET_CLOSE){
this.closePortlet()}}
},
stopAutoRefresh: function(){
if(this.ajaxPeriodicalUpdater !=null
&&this.options.refreshPeriod
&&this.isAutoRefreshSet==true){
this.ajaxPeriodicalUpdater.stop()}
},
startAutoRefresh: function(){
if(this.ajaxPeriodicalUpdater !=null&&this.options.refreshPeriod){
this.ajaxPeriodicalUpdater.start()}
},
refreshPortlet: function(e){
this.stopAutoRefresh()
if(this.ajaxPeriodicalUpdater !=null){
this.startAutoRefresh()
}else{
this.execute()}
},
closePortlet: function(e){
this.stopAutoRefresh()
Element.remove(this.options.source)
if(this.preserveState){
setCookie("AjaxJspTag.Portlet."+this.options.source,
AJAX_PORTLET_CLOSE,
this.options.expireDate)}
},
togglePortlet: function(e){
Element.toggle(this.options.target)
if(this.options.isMaximized){
$(this.options.toggle).src=this.options.imageMaximize
this.stopAutoRefresh()
}else{
$(this.options.toggle).src=this.options.imageMinimize
this.startAutoRefresh()}
this.options.isMaximized=!this.options.isMaximized
if(this.preserveState){
setCookie("AjaxJspTag.Portlet."+this.options.source,
(this.options.isMaximized==true ? AJAX_PORTLET_MAX : AJAX_PORTLET_MIN),
this.options.expireDate)}}
})
Ajax.XmlToHtmlAutocompleter=Class.create()
Object.extend(Object.extend(Ajax.XmlToHtmlAutocompleter.prototype,Autocompleter.Base.prototype),{
initialize: function(element,update,url,options){
this.baseInitialize(element,update,options)
this.options.asynchronous=true
this.options.onComplete=this.onComplete.bind(this)
this.options.defaultParams=this.options.parameters || null
this.url=url
},
getUpdatedChoices: function(){
entry=encodeURIComponent(this.options.paramName)+'='+
encodeURIComponent(this.getToken())
this.options.parameters=this.options.callback ?
this.options.callback(this.element,entry): entry
var params=buildParameterString(this.options.defaultParams)
if(!isEmpty(params)||(isString(params)&&params.length>0)){
this.options.parameters+='&'+params}
new Ajax.Request(this.url,this.options)
},
onComplete: function(request){
var parser=new ResponseXmlToHtmlListParser()
parser.load(request)
this.updateChoices(parser.content)}
})
AjaxJspTag.Autocomplete=Class.create()
AjaxJspTag.Autocomplete.prototype=Object.extend(new AjaxJspTag.Base(),{
initialize: function(url,options){
this.url=url
this.setOptions(options)
$(this.options.source).setAttribute("autocomplete","off")
new Insertion.After(this.options.source,'<div id="'+this.options.divElement+'" class="'+this.options.className+'"></div>')
this.execute()
},
setOptions: function(options){
this.options=Object.extend({
divElement: "ajaxAuto_"+options.source,
indicator: options.indicator || '',
parameters: options.parameters || '',
parser: options.parser ? options.parser : new ResponseHtmlParser(),
handler: options.handler ? options.handler : this.handler
},options ||{})
},
execute: function(e){
if(this.options.preFunction !=null)this.options.preFunction()
var obj=this
var aj=new Ajax.XmlToHtmlAutocompleter(
this.options.source,
this.options.divElement,
this.url,{minChars: obj.options.minimumCharacters,
tokens: obj.options.appendSeparator,
indicator: obj.options.indicator,
parameters: obj.options.parameters,
evalScripts: true,
afterUpdateElement: function(inputField,selectedItem){
obj.options.handler(null,{
selectedItem: selectedItem,
tokens: obj.options.appendSeparator,
target: obj.options.target,
inputField: inputField,
postFunction: obj.options.postFunction}
)}}
)
},
handler: function(request,options){
if(options.target){
if(options.tokens){
if($(options.target).value.length>0){
$(options.target).value+=options.tokens}
$(options.target).value+=options.selectedItem.id
}else{
$(options.target).value=options.selectedItem.id}}
if(options.postFunction !=null){
var onupdateHandler=$(options.inputField).onupdate
$(options.inputField).onupdate=''
options.postFunction(request)
$(options.inputField).onupdate=onupdateHandler}}
})
AjaxJspTag.Toggle=Class.create()
AjaxJspTag.Toggle.prototype=Object.extend(new AjaxJspTag.Base(),{
initialize: function(url,options){
this.url=url
this.setOptions(options)
if(this.options.messageClass){
this.messageContainer=new Insertion.Top($(this.options.source),
'<div id="'+this.options.source+'_message" class="'+this.options.messageClass+'"></div>')}
this.setListeners()
},
setOptions: function(options){
this.options=Object.extend({
parameters: options.parameters || 'rating={ajaxParameter}',
parser: options.parser ? options.parser : new ResponseTextParser(),
handler: options.handler ? options.handler : this.handler
},options ||{})
this.ratingParameter=AJAX_DEFAULT_PARAMETER
},
setListeners: function(){
var elements=$(this.options.source).getElementsByTagName('a')
for(var j=0;j<elements.length;j++){
elements[j].onmouseover=this.raterMouseOver.bindAsEventListener(this)
elements[j].onmouseout=this.raterMouseOut.bindAsEventListener(this)
elements[j].onclick=this.raterClick.bindAsEventListener(this)}
},
getCurrentRating: function(list){
var selectedIndex=-1
for(var i=0;i<list.length;i++){
if(Element.hasClassName(list[i],this.options.selectedClass)){
selectedIndex=i}}
return selectedIndex
},
getCurrentIndex: function(list,elem){
var currentIndex=0
for(var i=0;i<list.length;i++){
if(elem==list[i]){
currentIndex=i}}
return currentIndex
},
raterMouseOver: function(e){
var container=Event.findElement(e,'div')
var elements=container.getElementsByTagName('a')
var selectedIndex=this.getCurrentRating(elements)
var currentIndex=this.getCurrentIndex(elements,Event.element(e))
if(this.options.messageClass){
$(container.id+'_message').innerHTML=Event.element(e).title}
for(var i=0;i<elements.length;i++){
if(selectedIndex>-1){
if(i<=selectedIndex&&i<=currentIndex)
Element.addClassName(elements[i],this.options.selectedOverClass)
else if(i<=selectedIndex&&i>currentIndex)
Element.addClassName(elements[i],this.options.selectedLessClass)
else if(i>selectedIndex&&i<=currentIndex)
Element.addClassName(elements[i],this.options.overClass)
}else{
if(i<=currentIndex)Element.addClassName(elements[i],this.options.overClass)}}
},
raterMouseOut: function(e){
var container=Event.findElement(e,'div')
var elements=container.getElementsByTagName('a')
if(this.options.messageClass){
$(container.id+'_message').innerHTML=''}
for(var i=0;i<elements.length;i++){
Element.removeClassName(elements[i],this.options.selectedOverClass)
Element.removeClassName(elements[i],this.options.selectedLessClass)
Element.removeClassName(elements[i],this.options.overClass)}
},
raterClick: function(e){
var container=Event.findElement(e,'div')
var elements=container.getElementsByTagName('a')
var currentIndex=this.getCurrentIndex(elements,Event.element(e))
for(var i=0;i<elements.length;i++){
Element.removeClassName(elements[i],this.options.selectedOverClass)
Element.removeClassName(elements[i],this.options.selectedLessClass)
Element.removeClassName(elements[i],this.options.overClass)
if(i<=currentIndex){
if(Element.hasClassName(container,'onoff')
&&Element.hasClassName(elements[i],this.options.selectedClass)){
Element.removeClassName(elements[i],this.options.selectedClass)
}else{
Element.addClassName(elements[i],this.options.selectedClass)}
}else if(i>currentIndex){
Element.removeClassName(elements[i],this.options.selectedClass)}}
var ratingToSend=elements[currentIndex].title
if(Element.hasClassName(container,'onoff')){
var ratings=this.options.ratings.split(',')
if(ratings[0]==ratingToSend)ratingToSend=ratings[1]
else ratingToSend=ratings[0]}
this.execute(ratingToSend)
if(this.options.state){
$(this.options.state).value=ratingToSend}
},
execute: function(ratingValue){
if(this.options.preFunction !=null)this.options.preFunction()
var ajaxParameters=this.options.parameters || ''
var re=new RegExp("(\\{"+this.ratingParameter+"\\})",'g')
ajaxParameters=ajaxParameters.replace(re,ratingValue)
var params=buildParameterString(ajaxParameters)
var obj=this
var toggleStateFunc=this.getToggleStateValue
var aj=new Ajax.Request(this.url,{
asynchronous: true,
method: 'get',
evalScripts: true,
parameters: params,
onSuccess: function(request){
obj.options.parser.load(request)
var results=obj.options.parser.itemList
obj.options.handler(request,{items: results})
},
onFailure: function(request){
if(obj.options.errorFunction !=null)obj.options.errorFunction(request)
},
onComplete: function(request){
if(obj.options.postFunction !=null)obj.options.postFunction(request)}
})
},
handler: function(request,options){
},
getToggleStateValue: function(name,results){
for(var i=0;i<results.length;i++){
if(results[i][0]==name)return results[i][1]}
return ""}
})
AjaxJspTag.Callout=Class.create()
AjaxJspTag.Callout.prototype=Object.extend(new AjaxJspTag.Base(),{
initialize: function(url,options){
this.url=url
this.setOptions(options)
this.setListeners()
},
setOptions: function(options){
this.options=Object.extend({
parameters: options.parameters || '',
overlib: options.overlib || AJAX_CALLOUT_OVERLIB_DEFAULT,
parser: options.parser ? options.parser : new ResponseXmlToHtmlParser(),
handler: options.handler ? options.handler : this.handler
},options ||{})
this.calloutParameter=AJAX_DEFAULT_PARAMETER
},
setListeners: function(){
if(this.options.sourceClass){
var elemList=document.getElementsByClassName(this.options.sourceClass)
for(var i=0;i<elemList.length;i++){
elemList[i].onmouseover=this.calloutMouseover.bindAsEventListener(this)
elemList[i].onmouseout=this.calloutMouseout.bindAsEventListener(this)}}
},
calloutMouseover: function(e){
this.execute(e)
},
calloutMouseout: function(e){
nd()
},
execute: function(e){
if(this.options.preFunction !=null)this.options.preFunction()
var ajaxParameters=this.options.parameters || ''
var re=new RegExp("(\\{"+this.calloutParameter+"\\})",'g')
var elem=Event.element(e)
if(elem.type){
ajaxParameters=ajaxParameters.replace(re,$F(elem))
}else{
ajaxParameters=ajaxParameters.replace(re,elem.innerHTML)}
var params=buildParameterString(ajaxParameters)
var obj=this
var aj=new Ajax.Request(this.url,{
asynchronous: true,
method: 'get',
evalScripts: true,
parameters: params,
onSuccess: function(request){
obj.options.parser.load(request)
obj.options.handler(obj.options.parser.content,{title: obj.options.title,
overlib: obj.options.overlib})
},
onFailure: function(request){
if(obj.options.errorFunction !=null)obj.options.errorFunction(request)
},
onComplete: function(request){
if(obj.options.postFunction !=null)obj.options.postFunction(request)}
})
},
handler: function(content,options){
if(options.overlib){
if(options.title){
return eval("overlib(content,CAPTION,options.title,"+options.overlib+")")
}else{
return eval("overlib(content,"+options.overlib+")")}
}else{
if(options.title){
return overlib(content,CAPTION,options.title)
}else{
return overlib(content)}}}
})
