
/* frameworks/ajaxtags-1.2-beta2.js */

 
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'";RATED_FLAG='FALSE';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 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;}
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(','));}}});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.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){if(RATED_FLAG!='TRUE'){$(container.id+'_message').innerHTML=$('custom_rolloff_message').innerHTML;}
else
{$(container.id+'_message').innerHTML='Your Rating';}}
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.messageClass){$(container.id+'_message').innerHTML=$('custom_rolloff_message').innerHTML;}
if(this.options.messageClass){$(container.id+'_message').innerHTML='Your rating';RATED_FLAG='TRUE';}},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"";}});
