﻿Type.registerNamespace('Prestige.UI.WebControls');
Prestige.UI.WebControls.RatingBehavior = function(element) {
Prestige.UI.WebControls.RatingBehavior.initializeBase(this, [element]);
this._starCssClass = null;
this._filledStarCssClass = null;
this._emptyStarCssClass = null;
this._waitingStarCssClass = null;
this._readOnly = false;
this._ratingValue = 0;
this._currentRating = 0;
this._maxRatingValue = 5;
this._tag = "";
this._ratingDirection = 0;
this._stars = null;
this._callbackID = null;
this._mouseOutHandler = Function.createDelegate(this, this._onMouseOut);
this._starClickHandler = Function.createDelegate(this, this._onStarClick);
this._starMouseOverHandler = Function.createDelegate(this, this._onStarMouseOver);
this._keyDownHandler = Function.createDelegate(this, this._onKeyDownBack);
this._autoPostBack = false;
}
Prestige.UI.WebControls.RatingBehavior.prototype = {
initialize : function() {
Prestige.UI.WebControls.RatingBehavior.callBaseMethod(this, 'initialize');
var elt = this.get_element();
this._stars = [];
for (var i = 1; i <= this._maxRatingValue; i++) {
starElement = $get(elt.id + '_Star_' + i);
starElement.value = i;
Array.add(this._stars, starElement);
$addHandler(starElement, 'click', this._starClickHandler);
$addHandler(starElement, 'mouseover', this._starMouseOverHandler);
}
$addHandler(elt, 'mouseout', this._mouseOutHandler);        
$addHandler(elt, "keydown", this._keyDownHandler);
this._update();        
},
dispose : function() {
var elt = this.get_element();
if (this._stars) {
for (var i = 0; i < this._stars.length; i++) {
    var starElement = this._stars[i];
    $removeHandler(starElement, 'click', this._starClickHandler);
    $removeHandler(starElement, 'mouseover', this._starMouseOverHandler);
}
this._stars = null;
}
$removeHandler(elt, 'mouseout', this._mouseOutHandler);        
$removeHandler(elt, "keydown", this._keyDownHandler);
Prestige.UI.WebControls.RatingBehavior.callBaseMethod(this, 'dispose');
},
_onError : function(message, context) {
//alert(String.format(Prestige.UI.WebControls.Resources.Rating_CallbackError, message));
},
_receiveServerData : function(arg, context) {
context._waitingMode(false);
context.raiseEndClientCallback(arg);
},
_onMouseOut : function(e) {
if (this._readOnly) {
return;
}
this._currentRating = this._ratingValue;
this._update();
this.raiseMouseOut(this._currentRating);
},
_onStarClick : function(e) {
if (this._readOnly) {
return;
}
if (this._ratingValue != this._currentRating) {
this.set_Rating(this._currentRating);
}
},
_onStarMouseOver : function(e) {
if (this._readOnly) {
return;
}
if (this._ratingDirection == 0) {
this._currentRating = e.target.value;
} else {
this._currentRating = this._maxRatingValue + 1 - e.target.value;
}
this._update();
this.raiseMouseOver(this._currentRating);
},
_onKeyDownBack : function(ev){
if (this._readOnly) {
return;
}
var k = ev.keyCode ? ev.keyCode : ev.rawEvent.keyCode;
if ( (k == Sys.UI.Key.right) || (k == Sys.UI.Key.up) ) {
this._currentRating = Math.min(this._currentRating + 1, this._maxRatingValue);
this.set_Rating(this._currentRating);
ev.preventDefault();
ev.stopPropagation();
} else if ( (k == Sys.UI.Key.left) || (k == Sys.UI.Key.down) )  {
this._currentRating = Math.max(this._currentRating - 1, 1);
this.set_Rating(this._currentRating);
ev.preventDefault();
ev.stopPropagation();            
}
},
_waitingMode : function(activated) {
for (var i = 0; i < this._maxRatingValue; i++) {
var starElement;
if (this._ratingDirection == 0) {
    starElement = this._stars[i];
} else {
    starElement = this._stars[this._maxRatingValue - i - 1];
}
if (this._currentRating > i) {
    if (activated)
    {
        Sys.UI.DomElement.removeCssClass(starElement, this._filledStarCssClass);
        Sys.UI.DomElement.addCssClass(starElement, this._waitingStarCssClass);
    } else {
        Sys.UI.DomElement.removeCssClass(starElement, this._waitingStarCssClass);
        Sys.UI.DomElement.addCssClass(starElement, this._filledStarCssClass);
    }
} else {
    Sys.UI.DomElement.removeCssClass(starElement, this._waitingStarCssClass);
    Sys.UI.DomElement.removeCssClass(starElement, this._filledStarCssClass);
    Sys.UI.DomElement.addCssClass(starElement, this._emptyStarCssClass);
}
}
},
_update : function() {
var elt = this.get_element();
$get(elt.id + "_A").title = this._currentRating;
for (var i = 0; i < this._maxRatingValue; i++) {
var starElement;
if (this._ratingDirection == 0) {
    starElement = this._stars[i];
} else {
    starElement = this._stars[this._maxRatingValue - i - 1];
}
if (this._currentRating > i) {
    Sys.UI.DomElement.removeCssClass(starElement, this._emptyStarCssClass);
    Sys.UI.DomElement.addCssClass(starElement, this._filledStarCssClass);
}
else {
    Sys.UI.DomElement.removeCssClass(starElement, this._filledStarCssClass);
    Sys.UI.DomElement.addCssClass(starElement, this._emptyStarCssClass);
}
}
},
add_Rated : function(handler) {
this.get_events().addHandler("Rated", handler);
},
remove_Rated : function(handler) {
this.get_events().removeHandler("Rated", handler);
},
raiseRated : function(rating) {
var handler = this.get_events().getHandler("Rated");
if (handler) {
handler(this, new Prestige.UI.WebControls.RatingEventArgs(rating));
}
},
add_MouseOver : function(handler) {
this.get_events().addHandler("MouseOver", handler);
},
remove_MouseOver : function(handler) {
this.get_events().removeHandler("MouseOver", handler);
},
raiseMouseOver : function(rating_tmp) {
var handler = this.get_events().getHandler("MouseOver");
if (handler) {
handler(this, new Prestige.UI.WebControls.RatingEventArgs(rating_tmp));
}
},
add_MouseOut : function(handler) {
this.get_events().addHandler("MouseOut", handler);
},
remove_MouseOut : function(handler) {
this.get_events().removeHandler("MouseOut", handler);
},
raiseMouseOut : function(rating_old) {
var handler = this.get_events().getHandler("MouseOut");
if (handler) {
handler(this, new Prestige.UI.WebControls.RatingEventArgs(rating_old));
}
},
add_EndClientCallback : function(handler) {
this.get_events().addHandler("EndClientCallback", handler);
},
remove_EndClientCallback : function(handler) {
this.get_events().removeHandler("EndClientCallback", handler);
},
raiseEndClientCallback : function(result) {
var handler = this.get_events().getHandler("EndClientCallback");
if (handler) {
handler(this, new Prestige.UI.WebControls.RatingCallbackResultEventArgs(result));
}
},
get_AutoPostBack : function() {
return this._autoPostBack;
},
set_AutoPostBack : function(value) {
this._autoPostBack = value;
},
get_Stars : function() {
return this._stars;    
},
get_Tag : function() {
return this._tag;
},
set_Tag : function(value) {
if (this._tag != value) {
this._tag = value;
this.raisePropertyChanged('Tag');
}
},
get_CallbackID : function() {
return this._callbackID;
},
set_CallbackID : function(value) {
this._callbackID = value;
},

get_RatingDirection : function() {
return this._ratingDirection;
},
set_RatingDirection : function(value) {
if (this._ratingDirection != value) {
this._ratingDirection = value;
if (this.get_isInitialized()) {
    this._update();
}
this.raisePropertyChanged('RatingDirection');
}
},
get_EmptyStarCssClass : function() {
return this._emptyStarCssClass;
},
set_EmptyStarCssClass : function(value) {
if (this._emptyStarCssClass != value) {
this._emptyStarCssClass = value;
this.raisePropertyChanged('EmptyStarCssClass');
}
},
get_FilledStarCssClass : function() {
return this._FilledStarCssClass;
},
set_FilledStarCssClass : function(value) {
if (this._filledStarCssClass != value) {
this._filledStarCssClass = value;
this.raisePropertyChanged('FilledStarCssClass');
}
},
get_WaitingStarCssClass : function() {
return this._waitingStarCssClass;
},
set_WaitingStarCssClass : function(value) {
if (this._waitingStarCssClass != value) {
this._waitingStarCssClass = value;
this.raisePropertyChanged('WaitingStarCssClass');
}
},
get_Rating : function() {
this._ratingValue = Prestige.UI.WebControls.RatingBehavior.callBaseMethod(this, 'get_ClientState');
if (this._ratingValue == '') 
this._ratingValue = null;
return this._ratingValue;
},
set_Rating : function(value) {
if (this._ratingValue != value) {
this._ratingValue = value;
this._currentRating = value;
if (this.get_isInitialized()) {
    if ((value < 0) || (value > this._maxRatingValue)) {
        return;                
    }
    this._update();
    Prestige.UI.WebControls.RatingBehavior.callBaseMethod(this, 'set_ClientState', [ this._ratingValue ]);
    this.raisePropertyChanged('Rating');
    this.raiseRated(this._currentRating);
    this._waitingMode(true);
    var args = this._currentRating + ";" + this._tag;
    var id = this._callbackID;
    if (this._autoPostBack) {                    
        __doPostBack(id, args);
    }
    else {
        WebForm_DoCallback(id, args, this._receiveServerData, this, this._onError, true)
    }               
    
}
}
},
get_MaxRating : function() {
return this._maxRatingValue;
},
set_MaxRating : function(value) {
if (this._maxRatingValue != value) {
this._maxRatingValue = value;
this.raisePropertyChanged('MaxRating');
}
},
get_ReadOnly : function() {
return this._readOnly;
},
set_ReadOnly : function(value) {
if (this._readOnly != value) {
this._readOnly = value;
this.raisePropertyChanged('ReadOnly');
}
},
get_StarCssClass : function() {
return this._starCssClass;
},
set_StarCssClass : function(value) {
if (this._starCssClass != value) {
this._starCssClass = value;
this.raisePropertyChanged('StarCssClass');
}
}
}
Prestige.UI.WebControls.RatingBehavior.registerClass('Prestige.UI.WebControls.RatingBehavior', Prestige.UI.WebControls.BehaviorBase);
Prestige.UI.WebControls.RatingEventArgs = function(rating) {
Prestige.UI.WebControls.RatingEventArgs.initializeBase(this);
this._rating = rating;
}
Prestige.UI.WebControls.RatingEventArgs.prototype = {
get_Rating : function() {
return this._rating;
}
}
Prestige.UI.WebControls.RatingEventArgs.registerClass('Prestige.UI.WebControls.RatingEventArgs', Sys.EventArgs);
Prestige.UI.WebControls.RatingCallbackResultEventArgs = function(result) {
Prestige.UI.WebControls.RatingCallbackResultEventArgs.initializeBase(this);
this._result = result;
}
Prestige.UI.WebControls.RatingCallbackResultEventArgs.prototype = {
get_CallbackResult : function() {
return this._result;
}
}
Prestige.UI.WebControls.RatingCallbackResultEventArgs.registerClass('Prestige.UI.WebControls.RatingCallbackResultEventArgs', Sys.EventArgs);