/**
 * This code was originally created by http://www.qloud.com/. Some of the code might have been added or changed.
 * You can view the original source here: http://www.qloud.com/js/Library.js
 */

var KEY_BACKSPACE=8;
var KEY_TAB=9;
var KEY_RETURN=13;
var KEY_ESC=27;
var KEY_LEFT=37;
var KEY_UP=38;
var KEY_RIGHT=39;
var KEY_DOWN=40;
var KEY_DELETE=46;
var KEY_PGDOWN=34;
var KEY_PGUP=33;
var KEY_BLANK=32;

/**
 * Truncates a text if its length cannot fit in the designated space (column)
 * @param (String) str			The string to be truncated
 * @param (Number) maxLength	Column length, in "normal" (en) characters
 * @param (String) separator	The tokens separator (can be 0-length)
 */
function truncate(str, maxLength, separator) {
	// var normal = 'Iabcdeghkmnopqrsuvxyz234567890-+ ';
	var narrow = 'fijlt1\'\/,":;.';
	var wide = 'ABCDEFGHIJKLMNOPQRSTUVWXYZmw\\';
	var narrowPercent = 0.85;
	var widePercent = 1.15;
	var tokensArr = str.split(separator);
	var total = 0;
	var text = '';
	var sepLen = 0;
	// calculate length of separator
	for (var i=0; i<separator.length; ++i) {
		var current = separator.charAt(i);
		if (narrow.indexOf(current) >= 0) {
			sepLen += narrowPercent;
		} else if (wide.indexOf(current) >= 0) {
			sepLen += widePercent;
		} else {
			sepLen++;
		}
	}
	for (var index=0; index<tokensArr.length; ++index) {
		var token = tokensArr[index];
		var sum = 0;
		for (var i=0; i<token.length; ++i) {
			var current = token.charAt(i);
			if (narrow.indexOf(current) >= 0) {
				sum += narrowPercent;
			} else if (wide.indexOf(current) >= 0) {
				sum += widePercent;
			} else {
				++sum;
			}
		}
		if (total+sum+sepLen > maxLength-3) {
			return text + "...";
		} else {
			text += token + separator;
			total += sum + sepLen;
		}
	}
	return text;
}

function getTop(elem)
{
	if (elem.offsetParent) 
	{
		return elem.offsetTop + getTop(elem.offsetParent);
	}
	else 
	{
		return elem.offsetTop;
	}
}
function getLeft(elem)
{
	if (elem.offsetParent) 
	{
		return elem.offsetLeft + getLeft(elem.offsetParent);
	}
	else 
	{
		return elem.offsetLeft;
	}
}

function getLeftByNode(elem)
{
	if (elem.parentNode) 
	{
		return elem.offsetLeft + getLeftByNode(elem.parentNode);
	}
	else 
	{
		return elem.offsetLeft;
	}
}

function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function centerVertically(contentRef, containerRef)
{
	var h1 = contentRef.offsetHeight;
	var h2 = containerRef.offsetHeight;
	var dh;

	if (h1 < h2) {
		dh = Math.round((h2 - h1)/2);
		contentRef.style.paddingTop = dh + "px";
	}
}

/**
 * Checks if a value is in an array
 * @param mixed The value can be of any type except undefined
 * @param object The array/object to loop through and check for the value
 * @return This function returns false if the parameters are incorrect or 
 * the value is not in the array, otherwise it returns the index where the value is found
 * @example if (valueInArray(1,new Array(1,2,3,4,5))!==false) alert('Value exists in array')
 */ 

function valueInArray(value, arr)
{
	if (typeof(value)=='undefined')
	{
		return false;
	}
	if (typeof(arr)!='object')
	{
		return false;
	}
	for (var index in arr)
	{
		if (arr[index]==value)
		{
			return index;
		}
	}
	return false;
}

/**
 * Traces an object via Firebug's console
 * @param object
 */
function trace(object)
{
	try 
	{
		console.log(object);
	}
	catch (e)
	{
		if (_e('konsole_output'))
		{
			_e('konsole_output').innerHTML+="<hr>"+object;
		}
	}
}

/**
 * Alias for _e
 * @param string id
 */
function _e(id)
{
	return document.getElementById(id);
}

/**
 * Returns the event source
 * @param object e Optional parameter
 */
function getEventSrc(e)
{
	var eSrc;
	if (!e) var e = window.event;
	if (e.target) eSrc = e.target;
	else if (e.srcElement) eSrc = e.srcElement;
	if (eSrc.nodeType == 3) // defeat Safari bug
		eSrc = eSrc.parentNode;
	return eSrc;
}

/**
 * Returns all elements which have a specific class name
 * @param string className The name of the class which all the returned elements should have
 * @param string tag If this parameter is specified only <tag> elements are returned
 * @param object parent If this parameter is specified only the <parent>'s childs are returned
 * @return array
 */
function getElementsByClassName(className,tag,parent)
{
	if (tag==undefined){tag='*';}
	if (parent==undefined) {parent=document;}
	var elems=parent.getElementsByTagName(tag);
	var ret=new Array();
	for (var i=0;i<elems.length;i++)
	{
		if (elems[i].className==className) ret[ret.length]=elems[i];
	}
	return ret;
}

/**
 * Checks if an array is empty or not empty means its length is 0. Since we use arrays 
 * with non-numeric key quite a lot we can't use Array.length that so we use a little trick
 * @param object arr
 * @return boolean 
 */
function arrayEmpty(arr)
{
	for (var i in arr) 
	{
		return false;
	}
	return true;
}

function encodeHtmlEntities(str)
{
	if (str=='"') return "&quot;";
	if (str=="'") return "&quot;";
}

/**
*@param object 	event object
*@desc check if the enter/return key is pressed and executes a search 
*	   if there is no input filed or combo box selected
*/
function checkSearchOnReturnKey(e)
{
	var elem=getEventSrc(e);
	var eSource=elem.nodeName.toLowerCase();
	if(e.keyCode==KEY_RETURN)	
	{	//executes the onclick event handler of the search button
		if(SearchCauldron.getInstance().state==SearchCauldron.STATE_OPEN &&
			 (!FormLib.isTextInputControl(elem) ||
			  (FormLib.isTextInputControl(elem) && elem.value==""))
		)
		{
		 //cauldron is open OR the cursor is not in any input controll/the cursor 
		 //is in any input control AND no text has been typed in the control 
		 	if (Environment.getInstance().get('flyingCriteria'))
		 	{
		 		return false;
		 	}
			_e("search_button").onclick(e);
		}
		if (FormLib.isTextInputControl(elem) && elem.value!="")
		{
			//elem.blur();
		}
		//alert(elem.type);
	}	
	return true;
}

/**
*@desc
*/
function getElementOnReturnKey(e)
{
	if(e.keyCode==KEY_RETURN)
	{
		return getEventSrc(e);
	}
}

/**
*@desc get the top-left & right-bottom corners absolute coordinates of the visible area from the browser's window
*@return array
*/
function getVisibleAreaCoords()
{	
	var firefoxAdjustment=(Config.browserName=="msie" || Config.browserName=="safari")?0:18;//px		
	var isIE=Config.browserName=="msie"?true:false;
	var ieObject=isIE?(Config.browserVersion>=7?document.documentElement:document.body):null;
	var xScroll=isIE?ieObject.scrollLeft:window.pageXOffset;
	var yScroll=isIE?ieObject.scrollLeft:window.pageYOffset;	
	var innerWd=isIE?ieObject.clientWidth:window.innerWidth; 
	var innerHt=isIE?ieObject.clientHeight:window.innerHeight;	
	
	return {"topX":xScroll, "topY":yScroll, "bottomX":xScroll+innerWd-firefoxAdjustment, "bottomY":yScroll+innerHt};
}

// ----------- FORM RELATED FUNCTIONS ------
function FormLib(){}
/**
*@param object 	DOM element
*@desc test an element if it's a form controll or not
*@return boolean
*/
FormLib.isFormElement=function(el)
{
	if(("input,textarea,select").indexOf(el.nodeName.toLowerCase())!= -1)
	{
		return true;
	}
	return false;
}
/**
*@param object 	DOM element
*@desc test an element if it's a control that allows text to be typed in it
*@return boolean
*/
FormLib.isTextInputControl=function(el)
{
	if(FormLib.isFormElement(el)&& ("text,textarea,password").indexOf(el.type.toLowerCase())!=-1)
	{
		return true;
	}
	return false;
}

FormLib.isHighlightableElement=function(el)
{
	if(FormLib.isFormElement(el)&& ("text,textarea,password,select-one").indexOf(el.type.toLowerCase())!=-1)
	{
		return true;
	}
	return false;
}

FormLib.initInputBgrColor="";
FormLib.HIGHTLIGHT_BGR_COLOR="#F9F7CF";
FormLib.highlightInputText=function(e)
{
	var elem=getEventSrc(e);		
	if(!FormLib.isHighlightableElement(elem))		
		return;
	
	if(e.type=="focus")	
	{	
		FormLib.initInputBgrColor=elem.style.backgroundColor;
		elem.style.backgroundColor=FormLib.HIGHTLIGHT_BGR_COLOR;
	}	
	if(e.type=="blur")	
	{	
		elem.style.backgroundColor=FormLib.initInputBgrColor;
		FormLib.initInputBgrColor="";
	}		
}

FormLib.addGeneralInputEvents=function()
{
	var inputs=document.getElementsByTagName("input");
	for(var i=0; i<inputs.length;i++)
	{
		if(Config.browserName=="msie")
		{
			inputs.item(i).attachEvent("onblur",FormLib.highlightInputText);
			inputs.item(i).attachEvent("onfocus",FormLib.highlightInputText);
		}
		else
		{
			inputs.item(i).addEventListener("blur",FormLib.highlightInputText,false);
			inputs.item(i).addEventListener("focus",FormLib.highlightInputText,false);
		}
	}
	inputs=document.getElementsByTagName("textarea");
	for(var i=0; i<inputs.length;i++)
	{
		if(Config.browserName=="msie")
		{
			inputs.item(i).attachEvent("onblur",FormLib.highlightInputText);
			inputs.item(i).attachEvent("onfocus",FormLib.highlightInputText);
		}
		else
		{
			inputs.item(i).addEventListener("blur",FormLib.highlightInputText,false);
			inputs.item(i).addEventListener("focus",FormLib.highlightInputText,false);
		}
	}
	inputs=document.getElementsByTagName("select");
	for(var i=0; i<inputs.length;i++)
	{
		if(Config.browserName=="msie")
		{
			inputs.item(i).attachEvent("onblur",FormLib.highlightInputText);
			inputs.item(i).attachEvent("onfocus",FormLib.highlightInputText);
		}
		else
		{
			inputs.item(i).addEventListener("blur",FormLib.highlightInputText,false);
			inputs.item(i).addEventListener("focus",FormLib.highlightInputText,false);
		}
	}
}

FormLib.getSelectedValue = function (element)
{
	for (var i=0;i<element.length;i++)
	{
		if (element[i].checked || element[i].selected)
		{
			return element[i].value;
		}
	}
}
//--- END FORM RELATED FUNCTIONS



/**
 * Encode a string to base64
 * @param string input Text to encode
 */
function encode64(input) {
	var output = "";
	var chr1, chr2, chr3 = "";
	var enc1, enc2, enc3, enc4 = "";
	var i = 0;
	var keyStr = "ABCDEFGHIJKLMNOP" +
			"QRSTUVWXYZabcdef" +
			"ghijklmnopqrstuv" +
			"wxyz0123456789+/" +
			"=";
	do {
		chr1 = input.charCodeAt(i++);
		chr2 = input.charCodeAt(i++);
		chr3 = input.charCodeAt(i++);
		enc1 = chr1 >> 2;
		enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
		enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
		enc4 = chr3 & 63;
		if (isNaN(chr2)) {
			enc3 = enc4 = 64;
		} else if (isNaN(chr3)) {
			enc4 = 64;
		}
		output = output + 
			keyStr.charAt(enc1) + 
			keyStr.charAt(enc2) + 
			keyStr.charAt(enc3) + 
			keyStr.charAt(enc4);
		chr1 = chr2 = chr3 = "";
		enc1 = enc2 = enc3 = enc4 = "";
	} while (i < input.length);
	return output;
}
function populate_select_from_array(listArray,container_id,selectedValue,mode)
{
	var body_el = _e(container_id);
	var argv = arguments;
	for(var i in listArray)
	{
		var new_element = document.createElement("option");
		
		switch(mode)
		{
			case 1 :
				new_element.value = i;
			break;
			case 2 :
				new_element.value = listArray[i];
			break;
			case 3 :
				new_element.value = argv[4][i];
			break;
			case 4:  //elents are objects
				
				try
				{
					for(k in listArray[i])
					{
						new_element.value = k;
						new_element.innerHTML = listArray[i][k];
						if(selectedValue == k)
						{
							new_element.setAttribute("selected","true");
						}
					}
				}
				catch(err){}
				
				break;
			default :
				new_element.value = i;
		}
		if(mode!=4) //array of objects
		{
			new_element.innerHTML = listArray[i];
		}
		
		try
		{
			if(mode != 4)
			{
				if(selectedValue==listArray[i])
				{
					new_element.setAttribute("selected","true");
				}
			}
		}
		catch(err) {}
		body_el.appendChild(new_element);
	}
}

//function populate_select_from_array(listArray,container_id,selectedValue,mode)
//{
//	var body_el = _e(container_id);
//	var argv = arguments;
//	for(var i in listArray)
//	{
//		var new_element = document.createElement("option");
//		
//		switch(mode)
//		{
//			case 1 :
//				new_element.value = i;
//			break;
//			case 2 :
//				new_element.value = listArray[i];
//			break;
//			case 3 :
//				new_element.value = argv[4][i];
//			break;
//			default :
//				new_element.value = i;
//		}
//		new_element.innerHTML = listArray[i];
//		try
//		{
//			if(selectedValue==listArray[i])
//			{
//				new_element.setAttribute("selected","true");
//			}
//		}
//		catch(err) {}
//		body_el.appendChild(new_element);
//	}
//}
//


function login_return_press(elementReff,ev)
{
	if(!ev) ev = window.event;
	
	if(ev.keyCode==13)
	{	
		if(elementReff.id == "login_username")
		{
			
			_e("login_form").elements["login_password"].focus();
			
			
		}
		if(elementReff.id == "login_password")
		{
			LoginAreaController.getInstance().auth();
		}			
	}
}

/**
*@return number
*@desc returns a unique value that is time dependent
*/
function getUniqueValue()
{
	return (new Date()).getTime();
}

/**
*return the trimed value of the string
*/
String.prototype.trim=function()
{
	var tmpval=this.replace(/^[ \n]+/,"");	
	return tmpval.replace(/$[ \n]+/,"");	
}

/**
*return the string with first char as capital
*/
String.prototype.firstToUpperCase = function()
{
	var trimmed = this.trim();
	var ret = trimmed.charAt(0).toUpperCase() + trimmed.substr(1,trimmed.length-1); 
	return ret;
}

//returns an reffrence to the element we sould fly to
function getFlyToElement()
{
	if(ChannelEditWidget.getInstance().isEditing()==true)
	{
		return _e('edit_channel_form_criterias');
	}
	else
	{
		return _e('cauldron');
	}
}

function popupWindow(url,name,options)
{
	return window.open(url,name,options);
}



function testKeyPressOnInput(inputReff,event)
{
	if(!event) event = window.event;
	switch(event.keyCode)
	{
		case KEY_RETURN :
			inputReff.onblur();
		break;
	}
	
	return true;
}




function cloneArray(obj)
{
	var clone = new Array();
	for(var property in obj)
	{
		if(typeof obj[property] == "object")
		{
			clone[property] = cloneArray(obj[property]);
		}
		else
		{
			clone[property] = obj[property];
		}
	}
	
	return clone;
}




//Cookie manipulation functions

function CookieLib()
{
}
CookieLib.createCookie=function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

CookieLib.readCookie=function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
//	alert(ca);
	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;
}

CookieLib.eraseCookie=function eraseCookie(name) {
	CookieLib.createCookie(name,"",-1);
}





//Sound effects
function QloudSounds(swfURL)
{
	var selfObj=this;
	var soundContainer=document.createElement("div");
	soundContainer.style.position="absolute";
	soundContainer.style.zIndex="1000";	
	soundContainer.style.top="0px";
	soundContainer.style.left="0px";
	soundContainer.style.width="1px";
	soundContainer.style.height="1px";
	soundContainer.style.overflow="hidden";		
	var tmpBodyRef=document.getElementsByTagName("body");
	tmpBodyRef=tmpBodyRef.item(0);
	soundContainer=tmpBodyRef.insertBefore(soundContainer,tmpBodyRef.firstChild);
	
	var soundId="sound_"+getUniqueValue();
	var soundRef=null;
	
	if(Config.browserName=="msie" && Config.platform=="windows")
	{
		soundContainer.innerHTML='<object id="'+soundId+'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0" height="0" width="0">'+
			'<param name="movie" value="'+swfURL+'">'+
			'<param name="quality" value="high">'+
			'<param name="play" value="false">'+
		 '</object>';
	}
	else
	{
		soundContainer.innerHTML='<embed style="position:absolute;z-index:1000;" play="false" swliveconnect="true" name="'+soundId+'" id="'+soundId+'" src="'+swfURL+'" quality="high" bgcolor="#FFFFFF" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" height="0" width="0">';
	}
	
	//play the sound
	this.play=function play()
	{
		if(!soundRef)
		{
			soundRef=_e(soundId);			
		}
		if(soundRef)
		{			
			soundRef.Play();
		}		
	}
}
//for tenticles
function goToChartPage()
{
	var findParamsNames=["zipcode","city","state","gender","tag_id","older_than",
							"younger_than","artist","artist_id","avg_rating","sort",
							"user_id","track_id","track","album","is_friend_of",
							"album","album_id","distance_from","country","country_id","level_id","channel_id",
							"channel","group","group_id","offset"];
	var urlParams="";
	var envRef=Environment.getInstance();
	for(var i=0;i<findParamsNames.length;i++)
	{
		var val=envRef.get(findParamsNames[i]);		
		if(val)
		{
			urlParams+=findParamsNames[i]+"="+escape(val)+"&";				
		}		
	}
	urlParams+="backUrl="+escape(PermanentLink.getInstance().buildLink());
	window.location="tenticles.php?"+urlParams;
}

function linkto_(aReff,ieLink,mozillaLink)
{
	if(Config.browserName=="msie")
	{
		aReff.href = ieLink;
	}
	else
	{
		aReff.href = mozillaLink;
	}
}

function validateInput(inputReff,ev,filter)
{
	if(!ev) ev = window.event;
	
	var code = 0;
	var toAdd = "";
	code = ev.keyCode>0?ev.keyCode:ev.charCode;
	
	if((code==8)||(code==13)||(code==9))
	{
		return true;
	}
	
	if(filter.indexOf("NUMERIC_ONLY")>0)
	{
		if((code>=48)&&(code<=57))
		{
			toAdd = String.fromCharCode(code);
		}
	}
	
	if(filter.indexOf("MAX_LENGTH")>0)
	{
		var st = filter.indexOf(":",filter.indexOf("MAX_LENGTH"));
		var end = filter.indexOf(";",filter.indexOf("MAX_LENGTH"));
		var len = parseInt(filter.substring(st+1,end));
		if(inputReff.value.length>=len)
		{
			toAdd = "";
		}
	}

	inputReff.value += "" + toAdd;
	
	return false;
}
/**
*@desc select the content of an DOM element
*@param object ref. to the element
*/
function selectElementContent(elRef)
{
	if(Config.browserName=="safari")return;
	
	var range=null;
	if(document.body && document.body.createTextRange)
	{
			range=document.body.createTextRange();
			range.moveToElementText(elRef);
			range.select();
	}else if(document.createRange())
	{
			range=document.createRange();
			range.selectNode(elRef);				
	}
	
	if(range === null) return;
	 if(window.getSelection)
	 {
	 	var sel=window.getSelection();			
		sel.addRange(range);
	 }		 
}

/**
 * Encode input in base64
 */
function encode64(input) {
	var output = "";
	var chr1, chr2, chr3 = "";
	var enc1, enc2, enc3, enc4 = "";
	var i = 0;
	var keyStr = "ABCDEFGHIJKLMNOP" +
			"QRSTUVWXYZabcdef" +
			"ghijklmnopqrstuv" +
			"wxyz0123456789+/" +
			"=";
	do {
		chr1 = input.charCodeAt(i++);
		chr2 = input.charCodeAt(i++);
		chr3 = input.charCodeAt(i++);
		enc1 = chr1 >> 2;
		enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
		enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
		enc4 = chr3 & 63;
		if (isNaN(chr2)) {
			enc3 = enc4 = 64;
		} else if (isNaN(chr3)) {
			enc4 = 64;
		}
		output = output + 
			keyStr.charAt(enc1) + 
			keyStr.charAt(enc2) + 
			keyStr.charAt(enc3) + 
			keyStr.charAt(enc4);
		chr1 = chr2 = chr3 = "";
		enc1 = enc2 = enc3 = enc4 = "";
	} while (i < input.length);
	return output;
}

/**
	 * Get location parameters 
	 * @param {String} url	The full url
	 * @keyOfReturnValue {String} If defined returns the value of element with key keyOfReturnValue, else returns the whole parameters array as key=>value
	 */
function getLocationParams(url,keyOfReturnValue){

	// split address?params	
	addr_params = url.split('?');
	sParams = addr_params[1];
	
	// get params as key=value
	aParams = sParams.split('&');
	
	// get params keys and values
	var keyValues = new Array();
	for(var i in aParams){
		
		var aKeyValue = aParams[i].split('=');
		keyValues[aKeyValue[0]] = aKeyValue[1];	
	
		if((arguments[1] != undefined) && (arguments[1] == aKeyValue[0])){
			
			return aKeyValue[1];
			
		}
	}
	
	return keyValues;
}

function getPageDimensions()
{			
	var isIE=Config.browserName=="msie"?true:false;
	var rez=new Array();
	if(isIE)
	{
		rez["wd"]=document.documentElement.clientWidth; 
		rez["ht"]=document.documentElement.clientHeight;			
	}
	else
	{
		rez["wd"]=window.innerWidth; 
		rez["ht"]=window.innerHeight;	
	}	
	
//	rez["wd"] = 1000;
//	rez["ht"] = 700;
	
	return rez;
}

// DROP DOWN function
function DropDown(mainId)
{
	var containerRef=_e(mainId);
	var selfObj=this;
	if(!containerRef) return;
	var selection=_e(mainId+"_selection");
	var crtSelectedValue=null;
	var optionClassName=null;
	var options=_e(mainId+"_options");
	var optionsItems=null;
	var optionsValues=null;//the value map of each item in the options collection
	var crtSelectedIndex=null;

	this.hoverBgColor="#FF0000";
	this.defaultBgColor="#FFFFFF";
	
	this.onChange=null;
	
	selection.onclick=function selectionClickHandler()
	{
	 	options.style.display=(options.style.display=="none"?"":"none");			
	}
	
	
	/**
	*@param {Array} optionsArr  colection of objects {"value":123456,"html":"<img src=\"option.gif\"> Test"}
	*@desc Set the options of the dropdown
	*/
	this.setOptions=function setOptions(optionsArr)	
	{
		optionsItems=optionsArr;
		optionsValues=new Array();
		options.innerHTML="";
		for(var i=0;i<optionsItems.length;i++)
		{
			var crtEl=document.createElement("div");
			crtEl.id=containerRef.id+"_"+i;
			optionsValues.push(optionsItems[i]["value"]);
			crtEl.innerHTML=optionsItems[i]["html"];								
			crtEl.style.cursor="pointer";
			if(optionClassName)crtEl.className=optionClassName;
			options.appendChild(crtEl);
			crtEl.onmouseover=function optionHoverHandler()
			{
				this.style.backgroundColor=selfObj.hoverBgColor;
			}
			crtEl.onmouseout=function optionMouseOutHandler()
			{
				this.style.backgroundColor=selfObj.defaultBgColor;
			}	
			crtEl.onclick=function optionClickHandler()
			{//set the current selected value
				var val=this.id.split("_");					
				selfObj.setSelectedIndex(val[1]);
			}
		}
	}
	
	this.setSelectedIndex=function setSelectedIndex(index)
	{
		options.style.display="none";
		crtSelectedValue=optionsValues[index];			
		crtSelectedIndex=index;
		selection.innerHTML=optionsItems[index]["html"];
		if(this.onChange && arguments.length==1)this.onChange();
	}	
	
	this.setOptionsCSSClass=function setOptionsCSSClass(clsName)
	{
		optionClassName=clsName;
		if(options.childNodes.length>0)
		{
			for(var i=0;i<options.childNodes.length;i++)
			{
				options.childNodes.item(i).className=optionClassName;
			}
		}
	}	
	
	this.getCrtSelectedValue=function getCrtSelectedValue()
	{
		return crtSelectedValue;
	}
	this.getCrtSelectedIndex=function getCrtSelectedIndex()
	{
		return crtSelectedIndex;	
	}
}

function TestReturningVisitor()
{
	if((!CookieLib.readCookie("qloud_rember_me_usr")) && (!CookieLib.readCookie("qloud_returning_visitor")))
	{
		document.location.href = Config.baseURL + "homeindex.html";
		return;
	}
}

