//Localizable variables for error msg
var sReqMsg;
var	sLengthMsg;
var	sMainErrMsg;
var	sRatingErrMsg;	
var	sInvalidNick; 
var sInvalidEmail;
var sMultiOrginalMsg;
var sMultiRatingErr;
var sMultiMsgSeprator;
var sMultiMsgEnd;
var sAnd;
var sOneFieldRequired;

//Public Variables
var oItems = new Array();
var oValid = new Validator();
var arrayIndex=0;
var isMultiRatingErr=false;
var isButtonPressed=false;
var elmMultiRatingErr;
var doValidation = true;
var isAtleastOne=false;
var elmOneRequired;

function LimitText(ta) {
	if (ta.value.length >= ta.maxlength) {
		window.event.returnValue = false;
	}
}

function SetNickname(nickName)
{
	var rrusernickname;
	rrusernickname = document.getElementById("rrcnn");
	rrusernickname.value = nickName;	
}

function OpenWindow(Url, winName)
{
	window.open(Url, winName,"width=900,height=600,location=no,menubar=no,titlebar=yes,status=yes,toolbar=no,resizable=yes,scrollbars=yes");
	
}


function HideObject(objName)
{
	
	var obj = document.getElementById(objName);
	
	if(obj != null)
		obj.style.display="none";
}
function DoLinkPost(fieldName, fieldValue, actionUrl)
{
		if (window.navigator.appName.toLowerCase().indexOf("netscape") > -1) 
		{
			theform = document.forms["rrreviewform"];
		}
		else 
		{
			theform = document.rrreviewform;
		}
		
		if(fieldName != "" && fieldValue != "")
		{
			var hfield = document.getElementById(fieldName);
			if(hfield != null)
				hfield.value = fieldValue;		
		}
		
		if(actionUrl !=null)
			theform.action = actionUrl;
		
		//Don't do validation		
		theform.submit();
		return false;
}

function UpdateLink(link, href)
{
	var namedItem = document.createAttribute("href");
	namedItem.value = href;
	link.attributes.removeNamedItem("href");
	link.attributes.setNamedItem(namedItem);
}

function HandelKeyPress(whatForm)
{
	if(window.event.keyCode == 13 && !isButtonPressed)
	{
		if(whatForm == "displayreview")
		{
			var rrbtnwritereview  = document.getElementById("rrbtnwr");
			//Fire Click event on Submit button
			rrbtnwritereview.focus();
			rrbtnwritereview.click();	
			return false;
		}
	}
}

function ButtonPressed(button)
{
	if(window.event.keyCode == 13 && !isButtonPressed)
	{
		isButtonPressed=true;
		button.focus();
		button.click();
		return false;
	}
}

function SkipButton()
{
	doValidation = false;
}
function ValidateForm()
{
	//if a button was clicked that does not require validation	
	
	if(doValidation)
		if(oValid.Validate(oItems))
		{
			return true;
		}
		else
		{
			//Scroll to the top of the CONTROL
			var loc = window.location + "";
			
			if(loc.indexOf('#MSNRRTopPos') >=0)
				loc=loc.replace('#MSNRRTopPos','');
					
			loc = loc + "#MSNRRTopPos";			
			window.location = loc;
			return false;
		}
}
function Redirect(value)
{
	window.location = value;

}

function AddValidation(elmName, errElmName, validationType, fieldName, required, maxLength, debug)
{
	oItems[arrayIndex] = new InputField(elmName,errElmName, validationType, fieldName, required, maxLength);
	arrayIndex++;
}


//Validation Scripts
function Validator()
{
	this.Validate = f_validate;
}

function InputField( oItem, oErrElm, oValidationType, sFieldName, bRequired, iLength)
{
	
	//assert( oItem, "Item is null" );
	this.Required = bRequired;
	this.Item = oItem;
	this.ErrElm = oErrElm;
	this.ValidationType = oValidationType;	
	this.Name = sFieldName;
	this.Length = iLength;
	this.Check = oValidationType;
	this.Valid = true;
	
}

/*****************************************
*	VALIDATION TYPES
*****************************************/
Validator.MSNRR_TITLE = f_titleValidation;
Validator.MSNRR_TEXTAREA = f_textAreaValidation;
Validator.MSNRR_REQUIRED = f_requiredValidation;
Validator.MSNRR_NICKNAME = f_nicknameValidation;
Validator.MSNRR_MULTIRATING = f_multiRatingValidation;
Validator.MSNRR_EMAILADDRESS = f_emailAddressValidation;

//Validation Function
function f_validate(aFields)
{
	
	var oErr;
	var bisErr = false;
	
	//Reset the MultiRatingError Msg and the public var
	sMultiRatingErr = sMultiOrginalMsg;
	isMultiRatingErr = false;
	isAtleastOne=false;
	
	for(var i = 0;i<aFields.length;i++)
	{
		
		if(typeof(aFields[i].Item) == "string")
		{
			aFields[i].Item = document.getElementById(aFields[i].Item);
			aFields[i].ErrElm = document.getElementById(aFields[i].ErrElm);			
		}
				
		oErr = aFields[i].Check(aFields[i]);		
		
		if(oErr != null && oErr.Raised)
		{
			bisErr = true;
		}			
	}
	
	
	if( isMultiRatingErr )
	{
		sMultiRatingErr += sMultiMsgEnd;
		
		var lastIndex = sMultiRatingErr.lastIndexOf(",");
		if(lastIndex >=0)
		{
			var firstPart = sMultiRatingErr.substr(0,lastIndex);
			var lastPart = Trim(sMultiRatingErr.substr(lastIndex+1));
			sMultiRatingErr = firstPart + " " + sAnd + " " + lastPart;
		}		
		
		oErr.setError(sMultiRatingErr,elmMultiRatingErr);
	}else 
	if(elmMultiRatingErr != null)
	{
		
		oErr.clearError(elmMultiRatingErr);
	}
	
	elmOneRequired=document.getElementById("rrerrOneRequired");
	
	if(!isAtleastOne && elmOneRequired !=null)
	{
		bisErr = true;
		oErr.setError(sOneFieldRequired,elmOneRequired);
	}
	else if(elmOneRequired !=null)
		oErr.clearError(elmOneRequired);	
	
	if( bisErr )
		return false;
	else
		return true;
		
		
		
}


function f_titleValidation( oInputField )
{
	
	Trim( oInputField.Item );
	var oError = checkIfRequired( oInputField );
	
	if( !oError.Raised )
		oError = checkLength(oInputField);		
	
	return oError;
}

function f_textAreaValidation( oInputField )
{
	
	Trim( oInputField.Item );
	var oError = checkIfRequired( oInputField );
		
	if( !oError.Raised )
		oError = checkLength(oInputField);
	
	
	if(!oError.Raised && !isAtleastOne)
	{
		if(oInputField.Item.value.length < 1 && !oInputField.Required)
			isAtleastOne=false;																		
		else
			isAtleastOne = true;
	}else
		isAtleastOne = true;
	
	return oError;
}

function f_requiredValidation(oInputField)
{
	Trim( oInputField.Item );
	var oError = checkIfRequired( oInputField );
	return oError; 		
}

function f_nicknameValidation( oInputField )
{
	Trim( oInputField.Item );
	var oError = checkIfRequired( oInputField );
	if( !oError.Raised )
		oError = checknickName(oInputField);
		
	return oError;	
}

function f_emailAddressValidation( oInputField )
{
	Trim( oInputField.Item );
	var oError = checkIfRequired( oInputField );
	if( !oError.Raised )
		oError = checkEmail(oInputField);
		
	return oError;	
}

function f_multiRatingValidation( oInputField)
{
	Trim( oInputField.Item );
	var oError = new VError();
	
	if( oInputField.Required && oInputField.Item.value.length < 1 )
		oError.Raised = true;
	
	if(elmMultiRatingErr == null)
		elmMultiRatingErr = oInputField.ErrElm;
		
		
	if(oError.Raised)
	{
		isMultiRatingErr=true;
		
	
		if (sMultiRatingErr.indexOf("%attributes%") >=0)
		{
			sMultiRatingErr = sMultiRatingErr.replace("%attributes%",oInputField.Name);
		}else
		{
			sMultiRatingErr += sMultiMsgSeprator + " " + oInputField.Name;
		}
		
		
	}
	
	return oError;
																				
	
}

function Trim( oItem )
{
	
	var strValue;
	var isItem = true;
	if(typeof(oItem) == "string")
	{
		strValue = oItem;
		isItem=false;
	}else
		strValue = oItem.value;
	
	var objRegExp = /^(\s*)$/;
    //check for all spaces
    if(objRegExp.test(strValue)) 
    {
	   strValue = strValue.replace(objRegExp, '');
       if( strValue.length == 0)
	   {
          if(isItem)
			oItem.value = strValue;
          return strValue;          
        }
    }

   //check for leading & trailing spaces
   objRegExp = /^(\s*)([\W\w]*)(\b\s*$)/;
   if(objRegExp.test(strValue)) {
       //remove leading and trailing whitespace characters
       strValue = strValue.replace(objRegExp, '$2');
    }
    
    if(isItem)
     oItem.value = strValue;
    
    
  return strValue;
	
	
}

function ContainsValidEmail(oInputField)
{
	
	var emailReg = new RegExp("[A-Za-z0-9._%-]+@[A-Za-z0-9._%-]+\.[A-Za-z]{2,4}");
	var match = emailReg.exec(oInputField.Item.value);
	
	if(match == null)
		return false;
	else
		return true;
	
	
}

function checkEmail(oInputField)
{
	var oError = new VError();
	
	if(!ContainsValidEmail(oInputField))
		oError.setError(sInvalidEmail, oInputField.ErrElm);	
	
	
		
	return oError;
	
}

function checknickName (oInputField)
{
	
	var oError = new VError();
	var nickReg = new RegExp("[^A-Za-z0-9_-]");
	
	//var test = nickReg.test(oInputField.Item.value);
	
	if(oInputField.Item.value.length <3)
		oError.setError(sInvalidNick, oInputField.ErrElm);
	
	
	return oError;
	

}




function checkLength(oInputField)
{
	var oError = new VError();
	if(oInputField.Item.value.length > oInputField.Length)
	{
		oError.setError(sLengthMsg.replace("%maxLength%", FormatNumber(oInputField.Length)).replace("%length%", FormatNumber(oInputField.Item.value.length)), oInputField.ErrElm);	
	}
	return oError;
}

function checkIfRequired( oInputField )
{
	
	var oError = new VError();
	
		
	if( oInputField.Required && oInputField.Item.value.length < 1 )
	{
		oError.setError(sReqMsg.replace("%fieldName%", oInputField.Name), oInputField.ErrElm);	
	}else
		oError.clearError(oInputField.ErrElm);
		
	
	return oError;
}

function VError()
{
	this.Raised = false;
	this.setError = f_setError;
	this.clearError = f_clearError;
}

// error object function to turn on an error
function f_setError( sMessage, oErrElm )
{
	var rrmainerr = document.getElementById("rrmainerr");
	this.Raised = true;
	if(rrmainerr != null && sMainErrMsg != "")
	{
		rrmainerr.innerHTML = sMainErrMsg
	}
	oErrElm.innerHTML = sMessage;	
	
}

function f_clearError(oErrElm)
{
	oErrElm.innerHTML = "";		
}

//Helper function

function FormatNumber(num)
{
	
	var formated = new String(num);
		
	for(var i=0;i<Math.floor((formated.length-(1+i))/3);i++)
	{	
		formated = formated.substring(0,formated.length-(4*i+3)) + "," + formated.substring(formated.length-(4*i+3));	  
	}
	
	return formated;
	
}
