// Flash Player Version Detection - Rev 1.6
// Detect Client Browser type
// Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

function ControlVersion()
{
	var version;
	var axo;
	var e;

	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

	try {
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {
	}

	if (!version)
	{
		try {
			// version will be set for 6.X players only
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
			
			// installed player is some revision of 6.0
			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			// so we have to be careful. 
			
			// default to the first public version
			version = "WIN 6,0,21,0";

			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			axo.AllowScriptAccess = "always";

			// safe to call for 6.0r47 or greater
			version = axo.GetVariable("$version");

		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 4.X or 5.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 3.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = "WIN 3,0,18,0";
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 2.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			version = "WIN 2,0,0,11";
		} catch (e) {
			version = -1;
		}
	}
	
	return version;
}

// JavaScript helper required to detect Flash Player PlugIn version information
function GetSwfVer(){
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	var flashVer = -1;
	
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			var descArray = flashDescription.split(" ");
			var tempArrayMajor = descArray[2].split(".");			
			var versionMajor = tempArrayMajor[0];
			var versionMinor = tempArrayMajor[1];
			var versionRevision = descArray[3];
			if (versionRevision == "") {
				versionRevision = descArray[4];
			}
			if (versionRevision[0] == "d") {
				versionRevision = versionRevision.substring(1);
			} else if (versionRevision[0] == "r") {
				versionRevision = versionRevision.substring(1);
				if (versionRevision.indexOf("d") > 0) {
					versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
				}
			}
			var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	else if ( isIE && isWin && !isOpera ) {
		flashVer = ControlVersion();
	}	
	return flashVer;
}

// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
{
	versionStr = GetSwfVer();
	if (versionStr == -1 ) {
		return false;
	} else if (versionStr != 0) {
		if(isIE && isWin && !isOpera) {
			// Given "WIN 2,0,0,11"
			tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
			tempString        = tempArray[1];			// "2,0,0,11"
			versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
		} else {
			versionArray      = versionStr.split(".");
		}
		var versionMajor      = versionArray[0];
		var versionMinor      = versionArray[1];
		var versionRevision   = versionArray[2];

        	// is the major.revision >= requested major.revision AND the minor version >= requested minor
		if (versionMajor > parseFloat(reqMajorVer)) {
			return true;
		} else if (versionMajor == parseFloat(reqMajorVer)) {
			if (versionMinor > parseFloat(reqMinorVer))
				return true;
			else if (versionMinor == parseFloat(reqMinorVer)) {
				if (versionRevision >= parseFloat(reqRevision))
					return true;
			}
		}
		return false;
	}
}

function AC_AddExtension(src, ext)
{
  if (src.indexOf('?') != -1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs) 
{ 
    var str = '';
    if (isIE && isWin && !isOpera)
    {
  		str += '<object ';
  		for (var i in objAttrs)
  			str += i + '="' + objAttrs[i] + '" ';
  		for (var i in params)
  			str += '><param name="' + i + '" value="' + params[i] + '" /> ';
  		str += '></object>';
    } else {
  		str += '<embed ';
  		for (var i in embedAttrs)
  			str += i + '="' + embedAttrs[i] + '" ';
  		str += '> </embed>';
    }

    document.write(str);
}

function AC_FL_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  for (var i=0; i < args.length; i=i+2){
    var currArg = args[i].toLowerCase();    

    switch (currArg){	
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] = args[i+1];
        break;
      case "src":
      case "movie":	
        args[i+1] = AC_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] = args[i+1];
        ret.params[srcParamName] = args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblClick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
        ret.objAttrs[args[i]] = args[i+1];
        break;
      case "id":
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "tabindex":
        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
        break;
      default:
        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}


//v1.7
// Flash Player Version Detection
// Detect Client Browser type
// Copyright 2005-2007 Adobe Systems Incorporated.  All rights reserved.
var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

function ControlVersion()
{
	var version;
	var axo;
	var e;

	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

	try {
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {
	}

	if (!version)
	{
		try {
			// version will be set for 6.X players only
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
			
			// installed player is some revision of 6.0
			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			// so we have to be careful. 
			
			// default to the first public version
			version = "WIN 6,0,21,0";

			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			axo.AllowScriptAccess = "always";

			// safe to call for 6.0r47 or greater
			version = axo.GetVariable("$version");

		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 4.X or 5.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 3.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = "WIN 3,0,18,0";
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 2.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			version = "WIN 2,0,0,11";
		} catch (e) {
			version = -1;
		}
	}
	
	return version;
}

// JavaScript helper required to detect Flash Player PlugIn version information
function GetSwfVer(){
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	var flashVer = -1;
	
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			var descArray = flashDescription.split(" ");
			var tempArrayMajor = descArray[2].split(".");			
			var versionMajor = tempArrayMajor[0];
			var versionMinor = tempArrayMajor[1];
			var versionRevision = descArray[3];
			if (versionRevision == "") {
				versionRevision = descArray[4];
			}
			if (versionRevision[0] == "d") {
				versionRevision = versionRevision.substring(1);
			} else if (versionRevision[0] == "r") {
				versionRevision = versionRevision.substring(1);
				if (versionRevision.indexOf("d") > 0) {
					versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
				}
			}
			var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	else if ( isIE && isWin && !isOpera ) {
		flashVer = ControlVersion();
	}	
	return flashVer;
}

// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
{
	versionStr = GetSwfVer();
	if (versionStr == -1 ) {
		return false;
	} else if (versionStr != 0) {
		if(isIE && isWin && !isOpera) {
			// Given "WIN 2,0,0,11"
			tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
			tempString        = tempArray[1];			// "2,0,0,11"
			versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
		} else {
			versionArray      = versionStr.split(".");
		}
		var versionMajor      = versionArray[0];
		var versionMinor      = versionArray[1];
		var versionRevision   = versionArray[2];

        	// is the major.revision >= requested major.revision AND the minor version >= requested minor
		if (versionMajor > parseFloat(reqMajorVer)) {
			return true;
		} else if (versionMajor == parseFloat(reqMajorVer)) {
			if (versionMinor > parseFloat(reqMinorVer))
				return true;
			else if (versionMinor == parseFloat(reqMinorVer)) {
				if (versionRevision >= parseFloat(reqRevision))
					return true;
			}
		}
		return false;
	}
}

function AC_AddExtension(src, ext)
{
  if (src.indexOf('?') != -1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs) 
{ 
  var str = '';
  if (isIE && isWin && !isOpera)
  {
    str += '<object ';
    for (var i in objAttrs)
    {
      str += i + '="' + objAttrs[i] + '" ';
    }
    str += '>';
    for (var i in params)
    {
      str += '<param name="' + i + '" value="' + params[i] + '" /> ';
    }
    str += '</object>';
  }
  else
  {
    str += '<embed ';
    for (var i in embedAttrs)
    {
      str += i + '="' + embedAttrs[i] + '" ';
    }
    str += '> </embed>';
  }

  document.write(str);
}

function AC_FL_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_SW_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"
     , null
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  for (var i=0; i < args.length; i=i+2){
    var currArg = args[i].toLowerCase();    

    switch (currArg){	
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] = args[i+1];
        break;
      case "src":
      case "movie":	
        args[i+1] = AC_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] = args[i+1];
        ret.params[srcParamName] = args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblclick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
      case "id":
        ret.objAttrs[args[i]] = args[i+1];
        break;
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "tabindex":
        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
        break;
      default:
        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}
var jsonrpcClient;


function removeActivityByActivityId(activityId)
{
	if(!jsonrpcClient)
	{
		initAJAX();
	}
	jsonrpcClient.Activity.removeActivity(activityId);
	
	
}

function initAJAX() {	
	jsonrpcClient = new WebRpcClient();
}
var divName = "";
var stepThreeDiv="";
	var IE6;
	if (window.XMLHttpRequest) {
	  IE6 = false;
	} else {
	  IE6 = true;
	}

var storeAssetDivs = ["decorDiv", "impDiv", "clothingDiv", "hairDiv", "materialsDiv"];
var storeAssetTypes = ["Home Decor", "Home Improvement", "Clothing", "Hair", "Materials"];

function showDiv(divName) {

    if (divName == 'exchange') {
    document.getElementById('exchangeDiv').style.display = 'block';  
    document.getElementById('membersDiv').style.display = 'none';
    document.getElementById('newsDiv').style.display = 'none';  
    document.getElementById('gobutton').style.display = 'none';   
    document.getElementById('ContentType').selectedIndex=0;
    document.getElementById('storeDiv').style.display = 'none';
    document.getElementById('moviesAndMoreDiv').style.display = 'none';
	document.getElementById('otherSearchDiv').style.display = 'block'; 
    }
    
    if (divName == 'news') {
    document.getElementById('newsDiv').style.display = 'block';  
    document.getElementById('membersDiv').style.display = 'none';
    document.getElementById('exchangeDiv').style.display = 'none';
    document.getElementById('gobutton').style.display = 'block';   
    document.getElementById('ContentType').selectedIndex=0;
    document.getElementById('moviesAndMoreDiv').style.display = 'none';
	document.getElementById('otherSearchDiv').style.display = 'none'; 
	document.getElementById('ContentType').selectedIndex=0;
	hideExchangeDivs();
    }
    
    if (divName == 'Movies & More') {
    document.getElementById('otherSearchDiv').style.display = 'none';
    document.getElementById('newsDiv').style.display = 'none';  
    document.getElementById('membersDiv').style.display = 'none';
    document.getElementById('exchangeDiv').style.display = 'none';
    document.getElementById('moviesAndMoreDiv').style.display = 'block';
    document.getElementById('gobutton').style.display = 'block';   
    document.getElementById('ContentType').selectedIndex=0;
    hideExchangeDivs();
     
    }    
    
    if (divName == 'members') {
    document.getElementById('membersDiv').style.display = 'block';
    document.getElementById('gobutton').style.display = 'block';
    document.getElementById('exchangeDiv').style.display = 'none';
    document.getElementById('newsDiv').style.display = 'none';
    document.getElementById('storeDiv').style.display = 'none';
    document.getElementById('moviesAndMoreDiv').style.display = 'none';   
	document.getElementById('otherSearchDiv').style.display = 'block'; 
	hideExchangeDivs();
    }
    if(divName == 'store'){
    document.getElementById('storeDiv').style.display = 'block';
    document.getElementById('exchangeDiv').style.display = 'none';  
    document.getElementById('membersDiv').style.display = 'none';
    document.getElementById('gobutton').style.display = 'none';   
    document.getElementById('ContentType').selectedIndex=0;
    document.getElementById('moviesAndMoreDiv').style.display = 'none';
	document.getElementById('otherSearchDiv').style.display = 'block'; 
    }    
    if (divName == '0000') {
    document.getElementById('membersDiv').style.display = 'none';
    document.getElementById('exchangeDiv').style.display = 'none';
    document.getElementById('newsDiv').style.display = 'none';    
    document.getElementById('storeDiv').style.display = 'none';    
    document.getElementById('gobutton').style.display = 'none';    
    document.getElementById('moviesAndMoreDiv').style.display = 'none';    
    document.getElementById('otherSearchDiv').style.display = 'block'; 
    hideExchangeDivs();
    }
}

function hideExchangeDivs() {
    document.getElementById('step3Div').style.display = 'none';
    document.getElementById('householdDiv').style.display = 'none';
    document.getElementById('lotsDiv').style.display = 'none';    
    document.getElementById('worldsDiv').style.display = 'none';
    document.getElementById('accessoriesDiv').style.display = 'none';  
    document.getElementById('casPartclothingDiv').style.display = 'none';
    document.getElementById('objectSearchDiv').style.display = 'none';
    document.getElementById('globalMaterialsDiv').style.display = 'none';
    document.getElementById('hairDiv').style.display = 'none';
}

function showStoreDiv(stepThreeDiv){
	for(var i=0; i<storeAssetTypes.length; i++){
		if(stepThreeDiv == storeAssetTypes[i]){
			document.getElementById(storeAssetDivs[i]).style.display = 'block';
		}else{
			document.getElementById(storeAssetDivs[i]).style.display = 'none';
		}
	}
	document.getElementById('gobutton').style.display = 'block';
}

function showDivThree(stepThreeDiv) {		      
    if (stepThreeDiv == 'Sims') {
    document.getElementById('step3Div').style.display = 'block';
    document.getElementById('gobutton').style.display = 'block';
    document.getElementById('householdDiv').style.display = 'none';
    document.getElementById('lotsDiv').style.display = 'none';  
    document.getElementById('worldsDiv').style.display = 'none';
    document.getElementById('accessoriesDiv').style.display = 'none';   
    document.getElementById('casPartclothingDiv').style.display = 'none';
    document.getElementById('globalMaterialsDiv').style.display = 'none';
    document.getElementById('hairDiv').style.display = 'none';      
    document.getElementById('objectSearchDiv').style.display = 'none';
    if(IE6){
    document.getElementById('advSearchRightSide').style.marginTop = '-1400px';
    }

    } 
    
    else if (stepThreeDiv == 'Households') {
    document.getElementById('householdDiv').style.display = 'block';       
    document.getElementById('gobutton').style.display = 'block';
    document.getElementById('step3Div').style.display = 'none';
    document.getElementById('lotsDiv').style.display = 'none'; 
    document.getElementById('worldsDiv').style.display = 'none';
    document.getElementById('accessoriesDiv').style.display = 'none';   
    document.getElementById('casPartclothingDiv').style.display = 'none'; 
    document.getElementById('globalMaterialsDiv').style.display = 'none';
    document.getElementById('hairDiv').style.display = 'none';
    document.getElementById('objectSearchDiv').style.display = 'none';
    if(IE6){
    document.getElementById('advSearchRightSide').style.marginTop = '-20px';
    }
    } 
    
    else if (stepThreeDiv == 'Lots') {
    document.getElementById('householdDiv').style.display = 'none';       
    document.getElementById('gobutton').style.display = 'block';
    document.getElementById('step3Div').style.display = 'none';
    document.getElementById('lotsDiv').style.display = 'block';
    document.getElementById('worldsDiv').style.display = 'none';
    document.getElementById('accessoriesDiv').style.display = 'none';
    document.getElementById('casPartclothingDiv').style.display = 'none'; 
    document.getElementById('globalMaterialsDiv').style.display = 'none';
    document.getElementById('hairDiv').style.display = 'none';    
    document.getElementById('objectSearchDiv').style.display = 'none';
    if(IE6){
    document.getElementById('advSearchRightSide').style.marginTop = '-20px';
    }
    } 
    
    else if (stepThreeDiv == 'Worlds') {
    document.getElementById('worldsDiv').style.display = 'block'; 
    document.getElementById('householdDiv').style.display = 'none';       
    document.getElementById('gobutton').style.display = 'block';
    document.getElementById('step3Div').style.display = 'none';
    document.getElementById('lotsDiv').style.display = 'none';
    document.getElementById('accessoriesDiv').style.display = 'none';
    document.getElementById('casPartclothingDiv').style.display = 'none';
    document.getElementById('hairDiv').style.display = 'none';
    document.getElementById('objectSearchDiv').style.display = 'none';
    document.getElementById('globalMaterialsDiv').style.display = 'none';
    if(IE6){
    document.getElementById('advSearchRightSide').style.marginTop = '-20px';
    }
    } 
    
    else if (stepThreeDiv == 'Accessories'){        
    document.getElementById('householdDiv').style.display = 'none';  
    document.getElementById('step3Div').style.display = 'none';
    document.getElementById('lotsDiv').style.display = 'none';
    document.getElementById('worldsDiv').style.display = 'none';
    document.getElementById('accessoriesDiv').style.display = 'block'
    document.getElementById('casPartclothingDiv').style.display = 'none';
    document.getElementById('gobutton').style.display = 'block';
    document.getElementById('globalMaterialsDiv').style.display = 'none';
    document.getElementById('hairDiv').style.display = 'none';
    document.getElementById('objectSearchDiv').style.display = 'none';
    } 
    
    else if (stepThreeDiv == 'Clothing'){        
    document.getElementById('householdDiv').style.display = 'none';  
    document.getElementById('step3Div').style.display = 'none';
    document.getElementById('lotsDiv').style.display = 'none';
    document.getElementById('worldsDiv').style.display = 'none';
    document.getElementById('accessoriesDiv').style.display = 'none';
    document.getElementById('gobutton').style.display = 'block';
    document.getElementById('casPartclothingDiv').style.display = 'block'; 
    document.getElementById('globalMaterialsDiv').style.display = 'none';
    document.getElementById('hairDiv').style.display = 'none';
    document.getElementById('objectSearchDiv').style.display = 'none';
    if(IE6){
    document.getElementById('advSearchRightSide').style.marginTop = '-20px';
    }
    }
    
    else if (stepThreeDiv == 'Patterns & Materials'){     
    
    document.getElementById('householdDiv').style.display = 'none';  
    document.getElementById('step3Div').style.display = 'none';
    document.getElementById('lotsDiv').style.display = 'none';
    document.getElementById('worldsDiv').style.display = 'none';
    document.getElementById('accessoriesDiv').style.display = 'none';    
    document.getElementById('casPartclothingDiv').style.display = 'none';
    document.getElementById('hairDiv').style.display = 'none'; 
    document.getElementById('objectSearchDiv').style.display = 'none';
    document.getElementById('gobutton').style.display = 'block';
    document.getElementById('globalMaterialsDiv').style.display = 'block';
    if(IE6){
    document.getElementById('advSearchRightSide').style.marginTop='-690px';
    }
    }
    
    else if (stepThreeDiv == 'Hair'){
    document.getElementById('householdDiv').style.display = 'none';  
    document.getElementById('step3Div').style.display = 'none';
    document.getElementById('lotsDiv').style.display = 'none';
    document.getElementById('worldsDiv').style.display = 'none';
    document.getElementById('accessoriesDiv').style.display = 'none';
    document.getElementById('gobutton').style.display = 'block';
    document.getElementById('casPartclothingDiv').style.display = 'none';
    document.getElementById('globalMaterialsDiv').style.display = 'none';
    document.getElementById('hairDiv').style.display = 'block';
    document.getElementById('objectSearchDiv').style.display = 'none';
    if(IE6){
    document.getElementById('advSearchRightSide').style.marginTop = '-20px';
    }
    }
    
    else if (stepThreeDiv == 'Objects'){
        document.getElementById('householdDiv').style.display = 'none';  
        document.getElementById('step3Div').style.display = 'none';
        document.getElementById('lotsDiv').style.display = 'none';
        document.getElementById('worldsDiv').style.display = 'none';
        document.getElementById('accessoriesDiv').style.display = 'none';
        document.getElementById('gobutton').style.display = 'block';
        document.getElementById('casPartclothingDiv').style.display = 'none';
        document.getElementById('globalMaterialsDiv').style.display = 'none';
        document.getElementById('hairDiv').style.display = 'none';
        document.getElementById('objectSearchDiv').style.display = 'block';   
        if(IE6){
    document.getElementById('advSearchRightSide').style.marginTop = '-20px';
    }            
    }
   
    else {
    document.getElementById('householdDiv').style.display = 'none';  
    document.getElementById('step3Div').style.display = 'none';
    document.getElementById('lotsDiv').style.display = 'none';
    document.getElementById('worldsDiv').style.display = 'none';
    document.getElementById('gobutton').style.display = 'none';
    document.getElementById('accessoriesDiv').style.display = 'none';
    document.getElementById('casPartclothingDiv').style.display = 'none';
    document.getElementById('globalMaterialsDiv').style.display = 'none';
    document.getElementById('hairDiv').style.display = 'none';     
    if(IE6){
    document.getElementById('advSearchRightSide').style.marginTop = '-20px';
    }
    }
     
}
   
function checkAnyTrait() {
    for (var i=1; i < document.advancedSearchForm.simTraits.length; i++) {
        document.advancedSearchForm.simTraits[i].disabled = false;
        document.advancedSearchForm.simTraits[i].checked = false;        
    }
}

// Logic for tarits checkbox behavior
function checkTraits() {
    var count = 0;    
    // Getting the count of checkboxes checked (other than Any)
    for(var i=1; i < document.advancedSearchForm.simTraits.length; i++){
        if (document.advancedSearchForm.simTraits[i].checked) {            
            count = count + 1;
        }    
    }
    
    if (count == 1) {
        //Uncheck Any if any one is selected        
        document.advancedSearchForm.simTraits[0].disabled = false;
        if (document.advancedSearchForm.simTraits[0].checked) {
            document.advancedSearchForm.simTraits[0].checked = false;
        }
        
     } 
     
     if (count < 5) {
        document.advancedSearchForm.simTraits[0].disabled = false;
        for (var i=1; i < document.advancedSearchForm.simTraits.length; i++) {
            if (document.advancedSearchForm.simTraits[i].disabled) {
                document.advancedSearchForm.simTraits[i].disabled = false;
            }
        }      
    }
    
    if (count == 5) {
        // When 5 items are selected
        for (var i=1; i < document.advancedSearchForm.simTraits.length; i++) {
            if (!document.advancedSearchForm.simTraits[i].checked) {
                document.advancedSearchForm.simTraits[i].disabled = true;
            }
        }
        document.advancedSearchForm.simTraits[0].disabled = false;
    }    
}

	var findSpacesRegExp = new RegExp(" ", "g");
	
	function changeStep3Div(divStr, list){

		setStoreAssetAndCategoryType(divStr);
		divStr = divStr.substr(0,1).toLowerCase() + divStr.substr(1, divStr.length) + 'AssetList';
		divStr = divStr.replace(findSpacesRegExp, "");

		for(var i=0; i<list.length; i++  ){
			if(divStr == list[i] ){
				document.getElementById(list[i]+'Div').style.display = 'block';
			}else{
				document.getElementById(list[i]+'Div').style.display = 'none';
			}
		}
		document.getElementById("storeSearchKeyword").value="";
	}

	function clearStoreSearchKeyword(obj){
		if(obj.value == "Keywords"){
			obj.value = "";
		}
	}

	function setStoreSearchKeyword(obj){
		if(obj.value == ""){
			obj.value = "Keywords";
		}else{
			document.getElementById("storeSearchKeyword").value = obj.value;
		}
	}
		
	function setStoreCategoryType(val){
		document.getElementById('storeAssetCategory').value = val;
	}
	
	function setStoreAssetType(val){
		document.getElementById('storeAssetType').value = val;
	}

	function setStoreAssetAndCategoryType(val){
		document.getElementById('storeAssetType').value="";
		document.getElementById('storeAssetCategory').value = val;
	}
 var jsonrpcClient;
 var bookmarkPresent;
 var downloadPermitted;
function init(assetId,assetType,user)
{
    
	try{ 
		jsonrpcClient = new WebRpcClient();
		bookmarkPresent = new String(jsonrpcClient.Bookmark.isBookmarked(assetId,assetType));
		if (bookmarkPresent == "true")
		{
			hide("addBookmark");
			show("removeBookmark");			
		}
	} catch (e)	{
	}
}
function addBookmark(assetId,assetType)
{
	if(assetType == 'ASSET'){
	var evarString = 'loggedIn='+s_ea.prop1+',assetID='+s_ea.prop40
    	+',secondaryPersona='+s_ea.prop36
    	+',category='+s_ea.prop39;
    setOmniValues(location.href,'favouriteItem',location.href,evarString,'','favouriteItem',0,'','','');
    	}
    else if (assetType == 'CONTENT'){
    var evarString = 'loggedIn='+s_ea.prop1+',assetID='+s_ea.prop40
    	+',secondaryPersona='+s_ea.prop36
    	+',category='+s_ea.prop39;
    setOmniValues(location.href,'favoriteMedia',location.href,evarString,'','favoriteMedia',0,'','','');
    }
    
	 if(!jsonrpcClient)
	{
 		initAJAX();
	}
	var bookmarkChanged = new String(jsonrpcClient.Bookmark.addToBookmark(assetId,assetType));
	if(bookmarkChanged)
	{
		Effect.toggle("addBookmark","appear",{duration:0.01});
		Effect.toggle("removeBookmark","appear",{duration:0.03});
	}
}

function removeFav(assetId,assetType)
{
	 if(!jsonrpcClient)
	{
 		initAJAX();
	}
	try {
	var bookmarkChanged = new String(jsonrpcClient.Bookmark.removeFromBookmark(assetId,assetType));
	} catch (e) {
	}
	if(bookmarkChanged)
	{
		Effect.toggle("removeBookmark","appear",{duration:0.01});
		Effect.toggle("addBookmark","appear",{duration:0.03});
	}
}

function hideAsset(assetId)
{
    var hideStatusChanged = new String(jsonrpcClient.AjaxAssetItem.hideAsset(assetId));
    if(hideStatusChanged)
    {
        Effect.toggle("hideAsset","appear",{duration:0.01});
        Effect.toggle("unhideAsset","appear",{duration:0.03});
    }
}

function unhideAsset(assetId)
{
    try {
    var hideStatusChanged = new String(jsonrpcClient.AjaxAssetItem.unhideAsset(assetId));
    } catch (e) {
        alert (e);
    }
    if(hideStatusChanged)
    {
        Effect.toggle("unhideAsset","appear",{duration:0.01});
        Effect.toggle("hideAsset","appear",{duration:0.03});
    }
}


function deleteAsset(assetId,persona)
{
    var deleteStatusChanged = new String(jsonrpcClient.AjaxAssetItem.removeAsset(assetId,persona));
    if(deleteStatusChanged)
    {
        Effect.toggle("deleteAsset","appear",{duration:0.01});
        Effect.toggle("undeleteAsset","appear",{duration:0.03});
    }
}

function undeleteAsset(assetId)
{
    try {
    var deleteStatusChanged = new String(jsonrpcClient.AjaxAssetItem.undeleteAsset(assetId));
    } catch (e) {
        alert (e);
    }
    if(deleteStatusChanged)
    {
        Effect.toggle("undeleteAsset","appear",{duration:0.01});
        Effect.toggle("deleteAsset","appear",{duration:0.03});
    }
}


// there is a similar method ratePresetAsset in preset_slider.js which is being used to update preset assets. 
// this method could not be reused as we had to update a javascript array on the preset page and we thought 
// not to override this method to handle all cases. However, if there is any change in this method, please 
// also review the corresponding method in preset_slider.js. 
function rateAsset(assetId)
{
    if(! isUserLoggedIn)
    {
        loginAndAction('rating');
        return;
    }
    if(! isGameRegistered)
    {
        notificationProductAndAction('rating');
        return;
    }
    var evarString = 'loggedIn='+s_ea.prop1+',assetID='+s_ea.prop40
    	+',secondaryPersona='+s_ea.prop36
    	+',category='+s_ea.prop39;
    setOmniValues(location.href,'recommendItem',location.href,evarString,'','recommendItem',0,'','','');
    if(!jsonrpcClient)
	{
		initAJAX();
	}
	
    var result = jsonrpcClient.AjaxAssetItem.rateAsset(assetId);
    
 	if(result == -1)
    {
        alert(ratedMsg);
    }
    else
    {
	    totalRatingCount = result;
        hideObject('rate');
        hideObject('rateImage');
	    var rate = document.getElementById('rate');
	    var rateImage = document.getElementById('rateImage');
        var newImageDiv = "";
        newImageDiv += "<img  align='absmiddle'";
        newImageDiv += " src='" + sims3CDNUrlPrefix + "images/recomended.gif' />";
        document.getElementById('rate').innerHTML = result;
        rateImage.innerHTML = newImageDiv;                
	    Effect.BlindDown(rate);
	    Effect.BlindDown(rateImage);
    }   
    // if this is a preset, we need to update the result object on preset page 
    // to indicate that this item has been rated
    if(undefined != document.getElementById("presets_table") && undefined != theResult )
    {	
    	for (i = 0; i < theResult.list.length; i++)
    	{
    		if(theResult.list[i].assetId == assetId)
    		{
    			theResult.list[i].ratingCount = result;
				theResult.list[i].ratedByLoggedInUser = new Boolean(true);
				break;
    		}
    	}
    }
}


function downloadAsset(assetId)
{
	//if (limited_launcher && !readCookie("dontShowAgain")){
		//popup('limited_launcher');
		//return;
	//} else if (readCookie("dontShowAgain")){
		//return;
	//}
	if (document.getElementById("containsStoreItemsPresetPopup") != null && document.getElementById("containsStoreItemsPresetPopup").style.display == "block") {
		popup("containsStoreItemsPresetPopup");
	}
    if(! isUserLoggedIn)
    {       
        loginAndAction('download');
        return;
    }
    if(! isGameRegistered)
    {    
        notificationProductAndAction('featuredAssetDownload');
        return;
    }    
    downloadPermitted = true;
    return;
}

function hide(id) 
{
	//safe function to hide an element with a specified id
	if (document.getElementById) // DOM3 = IE5, NS6
	{ 
		document.getElementById(id).style.display = 'none';
	}
	else 
	{
		if (document.layers) 
		{ // Netscape 4
			document.id.display = 'none';
		}
		else 
		{ // IE 4
			document.all.id.style.display = 'none';
		}
     }
}
			
function show(id) 
{
	//safe function to show an element with a specified id
	if (document.getElementById) 
	{ // DOM3 = IE5, NS6
		document.getElementById(id).style.display = 'block';
	}
	else 
	{
		if (document.layers) 
		{ // Netscape 4
			document.id.display = 'block';
		}
		else 
		{ // IE 4
			document.all.id.style.display = 'block';	
		}
	}   
}			

 function mypopup(assetId)
 {
	window.open(urlPrefix+ "assetDetail.html?assetId="+assetId+"&showXml=true");
 }
 
 function showTabImage(whatTab){
	if (whatTab == 1){
		document.getElementById('tabBody14simDeExg').style.display = 'block';
		document.getElementById('tabBody24simDeExg').style.display = 'none';
		document.getElementById('tabBody34simDeExg').style.display = 'none';
		document.getElementById('tabBody44simDeExg').style.display = 'none';
		document.getElementById('detailsTabs14simDeExg').style.color = '#000';
		document.getElementById('detailsTabs24simDeExg').style.color = '#fff';
		document.getElementById('detailsTabs34simDeExg').style.color = '#fff';
		document.getElementById('detailsTabs44simDeExg').style.color = '#fff';
		document.getElementById('detailsTabs4simAssetDetails').style.background = 'url(/images/tabsOneLotAsset.jpg)';
		
	}
	else if (whatTab == 2){
		document.getElementById('tabBody14simDeExg').style.display = 'none';
		document.getElementById('tabBody24simDeExg').style.display = 'block';
		document.getElementById('tabBody34simDeExg').style.display = 'none';
		document.getElementById('tabBody44simDeExg').style.display = 'none';
		document.getElementById('detailsTabs14simDeExg').style.color = '#fff';
		document.getElementById('detailsTabs24simDeExg').style.color = '#000';
		document.getElementById('detailsTabs34simDeExg').style.color = '#fff';
		document.getElementById('detailsTabs44simDeExg').style.color = '#fff';
		document.getElementById('detailsTabs4simAssetDetails').style.background = 'url(/images/tabsTwoLotAsset.jpg)';
		
	}
		else if (whatTab == 3){
		document.getElementById('tabBody14simDeExg').style.display = 'none';
		document.getElementById('tabBody24simDeExg').style.display = 'none';
		document.getElementById('tabBody34simDeExg').style.display = 'block';
		document.getElementById('tabBody44simDeExg').style.display = 'none';
		document.getElementById('detailsTabs14simDeExg').style.color = '#fff';
		document.getElementById('detailsTabs24simDeExg').style.color = '#fff';
		document.getElementById('detailsTabs34simDeExg').style.color = '#000';
		document.getElementById('detailsTabs44simDeExg').style.color = '#fff';
		document.getElementById('detailsTabs4simAssetDetails').style.background = 'url(/images/tabsThreeLotAsset.jpg)';
	}
	
		else if (whatTab == 4){
		document.getElementById('tabBody14simDeExg').style.display = 'none';
		document.getElementById('tabBody24simDeExg').style.display = 'none';
		document.getElementById('tabBody34simDeExg').style.display = 'none';
		document.getElementById('tabBody44simDeExg').style.display = 'block';
		document.getElementById('detailsTabs14simDeExg').style.color = '#fff';
		document.getElementById('detailsTabs24simDeExg').style.color = '#fff';
		document.getElementById('detailsTabs34simDeExg').style.color = '#fff';
		document.getElementById('detailsTabs44simDeExg').style.color = '#000';
		document.getElementById('detailsTabs4simAssetDetails').style.background = 'url(/images/tabsFourLotAsset.jpg)';
	}
}



 function updateDownloadCount(assetId,simpackUrl)
 {  	 
		
 	//if (limited_launcher && !readCookie("dontShowAgain")){
		//popup('limited_launcher');
		//return;
	//} else if (readCookie("dontShowAgain")){
		//return;
	//} 
	//this is a pseudo req - first 3 params may not be required 
	var evarString = 'loggedIn='+s_ea.prop1+',assetID='+s_ea.prop40
    	+',secondaryPersona='+s_ea.prop36
    	+',category='+s_ea.prop39;
    setOmniValues(location.href,'addItem',location.href,evarString,'','addItem',0,'','','');
    if(jsonrpcClient == null)
    {
        jsonrpcClient = new WebRpcClient();
    }    	
	var nAgt = navigator.userAgent;
	if ((verOffset=nAgt.indexOf("Safari"))!=-1) {
		//This is to check the browser is Safari
        var result = jsonrpcClient.AjaxAssetItem.incrementAssetDownloadCount(assetId);
        callbackUpdateDownloadCount(result);  	    			
	} else {
		jsonrpcClient.AjaxAssetItem.incrementAssetDownloadCount(callbackUpdateDownloadCount, assetId);
	}
	document.getElementById("simPackDownloadIFrame").src=simpackUrl; 
	
 }
 
 
 function updateDownloadCountOpenNewWindow(assetId,simpackUrl)
 {	
 	//if (limited_launcher && !readCookie("dontShowAgain")){
		//popup('limited_launcher');
		//return;
	//} else if (readCookie("dontShowAgain")){
		//return;
	//}  
	   	
	
    if(jsonrpcClient == null)
    {
        jsonrpcClient = new WebRpcClient();
    }
    jsonrpcClient.AjaxAssetItem.incrementAssetDownloadCount(callbackUpdateDownloadCount,assetId);
    document.getElementById("simPackDownloadIFrame").src=simpackUrl;
 }
 
  function callbackUpdateDownloadCount(result)
 {
	 if(result != -1 && result!= null)
    {
    	var downloadCountDiv = document.getElementById("downloadCount");
        if(downloadCountDiv != null)
        {
          downloadCountDiv.innerHTML = "";
          downloadCountDiv.innerHTML = result;
          Effect.BlindDown(downloadCountDiv);            
        }
	    var assetDownloadCountDiv = document.getElementById("assetDownloadCount");
	    if(assetDownloadCountDiv != null)
		{
		    assetDownloadCountDiv.innerHTML = "";
	        assetDownloadCountDiv.innerHTML = result;
		    Effect.BlindDown(assetDownloadCountDiv);
		}
    }
 }
 
function downloadSpotLightAsset(assetId, packURL)
{
 	//if (limited_launcher && !readCookie("dontShowAgain")){
		//popup('limited_launcher');
		//return;
	//} else if (readCookie("dontShowAgain")){
		//return;
	//}
     if(! isUserLoggedIn)
     {      
         loginAndAction('');
         return;
     }
     if(! isGameRegistered)
     {  
         productCodeNotificationAction('download');
         return;
     }       
    if(jsonrpcClient == null)
 		jsonrpcClient = new WebRpcClient();
	jsonrpcClient.AjaxAssetItem.incrementAssetDownloadCount(callbackUpdateDownloadForFeaturedAsset,assetId);
	window.open(packURL);
	window.open("/assetDetail.html?assetId=" + assetId);
    return;
}
 
 function callbackUpdateDownloadForFeaturedAsset(result)
 {
    //todo
 }
 
 

function changeLabel(label)
{ 
	hideObject("downloadText");
	hideObject("downloadTextImage");
 	showObject("downloadAddToQueText");	
 	
	setTimeout('swapLabel()', 5000);
}
	
function swapLabel()
{ 
	hideObject("downloadAddToQueText");
 	showObject("downloadText");
 	showObject("downloadTextImage"); 	
}

function showTabWorldDetails(whatTab){
      if (whatTab == 1){
            document.getElementById('tabBody14simDeExg').style.display = 'block';
            document.getElementById('tabBody24simDeExg').style.display = 'none';
            document.getElementById('detailsTabs14simDeExg').style.color = '#fff';
            document.getElementById('detailsTabs2forworlds').style.color = '#333333';
            document.getElementById('detailsTabs4simDeExg').style.background = 'url(/images/tab2Detailsworld.gif)';
            
            
      }

      else if (whatTab == 2){
            document.getElementById('tabBody14simDeExg').style.display = 'none';
            document.getElementById('tabBody24simDeExg').style.display = 'block';
            document.getElementById('detailsTabs14simDeExg').style.color = '#333333';
            document.getElementById('detailsTabs2forworlds').style.color = '#fff';
            document.getElementById('detailsTabs4simDeExg').style.background = 'url(/images/tab1Detailsworld.gif)';
            
            
      }
}

function makeRetailerPromoCodeItem(type,id){
		
		var promoCode = document.getElementById('retailPromoCodeId').value;
		if(!(document.getElementById('stausChk').value == "" && promoCode== "")){
			if(jsonrpcClient == null){
	    		jsonrpcClient = new WebRpcClient();
 			}
    		jsonrpcClient.AjaxAssetItem.associateToPromoCode(callbackRetailPromoCode,type, id, promoCode);
		
		}
				
}

function callbackRetailPromoCode(result){
	

	if(result.map.status != '0'){
		document.getElementById('promoAssociatedMsg').style.display="block";
    	document.getElementById('promoCode4Msg').style.display="block";			
    	document.getElementById('promoCode4Msg').innerHTML=result.map.promocode+"."
    	document.getElementById('promoNotAssociatedMsg').style.display="none";        						
		//ASSOCIATION CREATED
		if(result.map.status == '1' ){
			unHideAssetToggleLink();
			document.getElementById('stausChk').value=result.map.promocode;
		}
	}else{
		unHideAssetToggleLink();
		document.getElementById('promoAssociatedMsg').style.display="none";
    	document.getElementById('promoCode4Msg').style.display="none";
    	document.getElementById('promoNotAssociatedMsg').style.display="block";   
    	document.getElementById('stausChk').value="";
	}
}

function hideAssetToggleLink(){
		Effect.toggle("hideAsset","appear",{duration:0.01});
    	Effect.toggle("unhideAsset","appear",{duration:0.03});
}

function unHideAssetToggleLink(){
	    Effect.toggle("unhideAsset","appear",{duration:0.01});
        Effect.toggle("hideAsset","appear",{duration:0.03});
}

clearPromoCodeDefault = function(defaultValue){
		var aa=document.getElementById('retailPromoCodeId');
        	if(aa.value == defaultValue){
                   aa.value='';
         }
    }	

function downloadFeaturedAssetsForMembers(assetId, simpackUrl){
	//if (limited_launcher && !readCookie("dontShowAgain")){
		//popup('limited_launcher');
		//return;
	//} else if (readCookie("dontShowAgain")){
		//return;
	//}
	if(! isUserLoggedIn)
	 {      
	     loginAndAction('');
	     return;
	 }
	 if(! isGameRegistered)
	 {  
	     productCodeNotificationAction('featuredAssetDownload');
	     return;
	 }       
	if(jsonrpcClient == null)
	{
	    jsonrpcClient = new WebRpcClient()
	}
	jsonrpcClient.AjaxAssetItem.incrementAssetDownloadCount(callbackUpdateDownloadCount,assetId);
	eraseCookie("action");
	document.getElementById("simPackDownloadIFrame").src=simpackUrl;
}
function SelectImg(id) {
    if(document.getElementById(lastID) != null)
    {
        document.getElementById(lastID).className = "borders_off";
    }
    if(document.getElementById(id) != null)
    {
        document.getElementById(id).className = "borders_on";
    }
    lastID = id;
}

function SetClass(){
	for (var i=1, el; el = document.getElementById(arguments[i]); i++) {
	    el.className=arguments[0];
    }    
}
function loadTrigger() {
    SelectImg(lastID);
}

function displaySimDetail(assetId)
{
	 SelectImg(assetId);
	 try
	 { 
		 if(undefined != listingItems)
		 {
			 displayAssetFromJS(getListIndexForAssetId(assetId));
		 }
	 } 
	 catch (e)
	 {
		 jsonrpcClient = new WebRpcClient();
		 jsonrpcClient.AjaxAssetItem.getAssetForDisplay(callbackDisplayAsset,assetId);			 
	 }
}

function displayAssetFromJS(index) {
	var topDownloadsFlag = document.getElementById("topDownloadsFlag");
	if(topDownloadsFlag != null){
		displayTopDownloadsFromJS(index);
   		return;
	}
	var asset = listingItems[index];
	var assetId = asset.assetId;
	var assetType = asset.assetType;
	var newDisplayNameDivContent = "<a class='green h1' href='" + contextPath + "/assetDetail.html?assetId=" + assetId + "'/>";
	newDisplayNameDivContent += asset.assetName + "</a>";
	document.getElementById("displayNameDivId").innerHTML = newDisplayNameDivContent;

	var headShotImgDiv = document.getElementById("headShotImgDivId");
	headShotImgDiv.innerHTML = "<a href='" + contextPath + "/assetDetail.html?assetId=" + assetId + "'>" + asset.assetLargeImgURL + "</a>";

	var creatorPersonaSpan = document.getElementById("creatorPersonaSpanId");
	var newCreatorPersonaSpan = "<a class='blue' href='" + contextPath + "/mypage/" + asset.persona + "'/>";
	newCreatorPersonaSpan += asset.persona + "</a>&nbsp;";
	creatorPersonaSpan.innerHTML = newCreatorPersonaSpan;
	
	var createdAtSpan = document.getElementById("assetCreatedAtSpanId");
	createdAtSpan.innerHTML = asset.assetCreatedAt;	
	
	var assetCountrySpan = document.getElementById("assetCountrySpanId");
	assetCountrySpan.innerHTML = asset.assetCountry + ' ' + asset.assetLanguage;
	
	var assetDownloadCountSpan = document.getElementById("assetDownloadCount");
    assetDownloadCountSpan.innerHTML = asset.assetDownloadCount;

    var assetRatingCountSpan = document.getElementById("assetRatingCount");
    assetRatingCountSpan.innerHTML = asset.assetRatingCount;
    
    var addToGameMainDiv = document.getElementById("addToGameMainDivId");
    var downloadImg = document.getElementById("downloadImgId").innerHTML;
    var addToGameLink = document.getElementById("addToGameLinkId").innerHTML;
    
	var addToGameMethodName = getMethodNameForDownload(asset,true); 
	var newDownloadImgLink = "<a id='downloadImgId' href=\""+addToGameMethodName+"\">";
	addToGameMainDiv.innerHTML = newDownloadImgLink + downloadImg + "</a>";
	   
	var newAddToGameLink =  "<a id='addToGameLinkId'style='color:#78B800' href=\""+addToGameMethodName+"\">";
	var addToGameDiv = document.getElementById("addToGameDivId");
	addToGameDiv.innerHTML = newAddToGameLink + addToGameLink + "</a>";
	
    if(assetType == 'lot')
    {
    	var assetLotTypeSpan = document.getElementById("assetLotTypeSpanId");
        assetLotTypeSpan.innerHTML = asset.assetLotType;
        
        var assetlotSizeSpan = document.getElementById("assetlotSizeSpanId");
        assetlotSizeSpan.innerHTML = asset.assetlotSize;
        
        var assetLotOccupiedSpan = document.getElementById("assetLotOccupiedSpanId");
        assetLotOccupiedSpan.innerHTML = asset.assetLotOccupied;
        
        var assetResidentsSpan = document.getElementById("assetResidentsSpanId");
        assetResidentsSpan.innerHTML = asset.assetResidents;
        
    }
    if(assetType == 'cascolorinfo' ){
        var assetMaterialTypeSpan = document.getElementById("assetMaterialTypeSpanId");
        if(assetMaterialTypeSpan != null){
         	assetMaterialTypeSpan.innerHTML = asset.assetMaterialType;
        }
     }
    if(assetType == 'world')
    {
         var assetWorldSizeSpan = document.getElementById("assetWorldSizeSpanId");
         assetWorldSizeSpan.innerHTML = asset.assetWorldSize;
         
         var assetNoOfLotsSpan = document.getElementById("assetNoOfLotsSpanId");
         assetNoOfLotsSpan.innerHTML = asset.assetNoOfLots;
         
         var assetworldResidentsSpan = document.getElementById("assetworldResidentsSpanId");
         assetworldResidentsSpan.innerHTML = asset.assetworldResidents;
       
     }
     
    if(assetType == 'household')
    {
         var assetHouseholdResidentsSpan = document.getElementById("assetHouseholdResidentsSpanId");
         assetHouseholdResidentsSpan.innerHTML = asset.assetHouseholdResidents;
         
         var assetHouseholdFundsSpan = document.getElementById("assetHouseholdFundsSpanId");
         assetHouseholdFundsSpan.innerHTML = asset.assetHouseholdFunds;
      
     }
     
    if(assetType == 'CASpart' || assetType == 'preset')
    {
    	   
        var assetCASPartGenderSpan = document.getElementById("assetCASPartGenderSpanId");
        if(assetCASPartGenderSpan != null){
        assetCASPartGenderSpan.innerHTML = asset.assetCASPartGender;
        }
             
        var assetCASPartAgeSpan = document.getElementById("assetCASPartAgeSpanId");
        if(assetCASPartAgeSpan != null){
        assetCASPartAgeSpan.innerHTML = asset.assetCASPartAge;
        }
        
        var assetClothingCategorySpan = document.getElementById("assetClothingCategorySpanId");
        if(assetClothingCategorySpan != null)
        {
 	       assetClothingCategorySpan.innerHTML = asset.assetClothingCategory;
 	   }
 	   var assetClothingTypeSpan = document.getElementById("assetClothingTypeSpanId");
 	   if(assetClothingTypeSpan != null)    
 	   {
 	        assetClothingTypeSpan.innerHTML = asset.assetClothingType;
        }
        var assetAccessoryTypeSpan = document.getElementById("assetAccessoryTypeSpanId"); 
        if(assetAccessoryTypeSpan != null)
        {
             assetAccessoryTypeSpan.innerHTML = asset.assetAccessoryType;
        }
      
     }
     
     if(assetType == 'object' || assetType == 'preset'){
        var assetObjectTypeSpan = document.getElementById("assetObjectTypeSpanId");
        if(assetObjectTypeSpan != null){
        	assetObjectTypeSpan.innerHTML = asset.assetObjectType.truncate(15);
        }
     }
}

function getListIndexForAssetId(assetId)
{
	for ( var i = 0; i < listingItems.length; i++) {
		if(listingItems[i].assetId == assetId)
		{
			return  i;			
		}
	}
}

function displayTopDownloadsFromJS(index)
{
	var asset = listingItems[index];
	var assetId = asset.assetId;
	var headShotImgDiv = document.getElementById("headShotImgDivId");

   var displayNameDiv = document.getElementById("displayNameDivId");
   var newDisplayNameDivContent = "<a class='blue h1' href='" + contextPath + "/assetDetail.html?assetId=" + assetId + "'/>" ;
   
   newDisplayNameDivContent += asset.assetName + "</a>";
   displayNameDiv.innerHTML = newDisplayNameDivContent;
	 
	headShotImgDiv.innerHTML = "<a href='"+contextPath+"/assetDetail.html?assetId="+asset.assetId+"'>" +asset.imgURL+ "</a>";

   var creatorPersonaSpan = document.getElementById("creatorPersonaSpanId");
   var newCreatorPersonaSpan = "<a class='blue' href='"+contextPath+"/mypage/"+asset.persona+"'/>";
   newCreatorPersonaSpan += asset.persona + "</a>&nbsp;";
   creatorPersonaSpan.innerHTML = newCreatorPersonaSpan;
   
   var createdAtSpan = document.getElementById("assetCreatedAtSpanId");
   createdAtSpan.innerHTML = asset.assetCreatedAt;
					
   var assetRatingCountSpan = document.getElementById("topDownloadsAssetRatingCountSpanId");
   assetRatingCountSpan.innerHTML = asset.assetRatingCount;

   var assetDownloadCountSpan = document.getElementById("assetDownloadCountSpanId");
   assetDownloadCountSpan.innerHTML = asset.assetDownloadCount;

   var addToGameMainDiv = document.getElementById("topDownloadsAddToGameMainDivId");
   var downloadImg = document.getElementById("downloadImgId").innerHTML;
   var addToGameLink = "";
   if(document.getElementById("addToGameLinkId") != null)
   addToGameLink = document.getElementById("addToGameLinkId").innerHTML;
   
  var addToGameMethodName = getMethodNameForDownload(asset,true); 
  var newDownloadImgLink = "<a id='downloadImgId' href=\""+addToGameMethodName+"\">";
  addToGameMainDiv.innerHTML = newDownloadImgLink + downloadImg + "</a>";
  
  var newAddToGameLink =  "<a style='color:#78B800' id='addToGameLinkId' href=\""+addToGameMethodName+"\">";
  var addToGameDiv = document.getElementById("addToGameDivId");
  addToGameDiv.innerHTML = newAddToGameLink + addToGameLink + "</a>";

}

function callbackDisplayTopDownloadsAsset(result)
{
	var asset = result;
	var assetId = asset.assetId;
	var assetType = asset.assetType;
	var headShotImgDiv = document.getElementById("headShotImgDivId");

   var displayNameDiv = document.getElementById("displayNameDivId");
   var newDisplayNameDivContent = "<a class='blue h1' href='"+contextPath+"/assetDetail.html?assetId="+asset.assetId+"'/>";
   newDisplayNameDivContent += asset.name + "</a>";
   displayNameDiv.innerHTML = newDisplayNameDivContent;
	 
	headShotImgDiv.innerHTML = "<a href='"+contextPath+"/assetDetail.html?assetId="+asset.assetId+"'><img src='" +asset.thumbnailUrl+ "' width='128' height='128' class='gray_brdr' /></a>";

   var creatorPersonaSpan = document.getElementById("creatorPersonaSpanId");
   var newCreatorPersonaSpan = "<a class='blue' href='"+contextPath+"/mypage/"+asset.createdByPersona+"'/>";
   newCreatorPersonaSpan += asset.createdByPersona + "</a>&nbsp;";
   creatorPersonaSpan.innerHTML = newCreatorPersonaSpan;
   
   var createdAtSpan = document.getElementById("assetCreatedAtSpanId");
   createdAtSpan.innerHTML = asset.createdAt;
					
   var assetRatingCountSpan = document.getElementById("topDownloadsAssetRatingCountSpanId");
   assetRatingCountSpan.innerHTML = asset.ratingCount;

   var assetDownloadCountSpan = document.getElementById("assetDownloadCountSpanId");
   assetDownloadCountSpan.innerHTML = asset.downloadCount;

   var addToGameMainDiv = document.getElementById("topDownloadsAddToGameMainDivId");
   var downloadImg = document.getElementById("downloadImgId").innerHTML;
   var addToGameLink = "";
   if(document.getElementById("addToGameLinkId") != null)
   addToGameLink = document.getElementById("addToGameLinkId").innerHTML;
   
  var addToGameMethodName = getMethodNameForDownload(asset,true); 
  var newDownloadImgLink = "<a id='downloadImgId' href=\""+addToGameMethodName+"\">";
  addToGameMainDiv.innerHTML = newDownloadImgLink + downloadImg + "</a>";
  
  var newAddToGameLink =  "<a style='color:#78B800' id='addToGameLinkId' href=\""+addToGameMethodName+"\">";
  var addToGameDiv = document.getElementById("addToGameDivId");
  addToGameDiv.innerHTML = newAddToGameLink + addToGameLink + "</a>";

}

function callbackDisplayAsset(result)
{
   var topDownloadsFlag = document.getElementById("topDownloadsFlag");
   if(topDownloadsFlag != null){
		callbackDisplayTopDownloadsAsset(result);
   		return;
   }
   
   var asset = result;
   var assetId = asset.assetId;
   var assetType = asset.assetType;
   var headShotImgDiv = document.getElementById("headShotImgDivId");
   headShotImgDiv.innerHTML = "<a href='"+contextPath+"/assetDetail.html?assetId="+asset.assetId+"'><img src='" +asset.thumbnailUrl+ "' width='225' height='225' border='1'  style='border-color:#ccc' /></a>"; 
   
   var displayNameDiv = document.getElementById("displayNameDivId");
   var newDisplayNameDivContent = "<a class='green h1'  style='font-size:18px;font-weight:bold;' href='"+contextPath+"/assetDetail.html?assetId="+asset.assetId+"'/>";
   newDisplayNameDivContent += asset.name + "</a>";
   displayNameDiv.innerHTML = newDisplayNameDivContent;
   
   var creatorPersonaSpan = document.getElementById("creatorPersonaSpanId");
   var newCreatorPersonaSpan = "<a class='green' href='"+contextPath+"/mypage/"+asset.createdByPersona+"'/>";
   newCreatorPersonaSpan += asset.createdByPersona + "</a>";
   creatorPersonaSpan.innerHTML = newCreatorPersonaSpan;
   
   var createdAtSpan = document.getElementById("assetCreatedAtSpanId");
   createdAtSpan.innerHTML = asset.createdAt;
   
   if(assetType == 'lot')
   {
        var assetLotTypeSpan = document.getElementById("assetLotTypeSpanId");
        assetLotTypeSpan.innerHTML = asset.lotType;
        
        var assetlotSizeSpan = document.getElementById("assetlotSizeSpanId");
        assetlotSizeSpan.innerHTML = asset.lotSize;
        
        var assetLotOccupiedSpan = document.getElementById("assetLotOccupiedSpanId");
        assetLotOccupiedSpan.innerHTML = asset.lotOccupied;
        
        var assetResidentsSpan = document.getElementById("assetResidentsSpanId");
        assetResidentsSpan.innerHTML = asset.lotResidents;
        
    }
    
    if(assetType == 'cascolorinfo' ){
       var assetMaterialTypeSpan = document.getElementById("assetMaterialTypeSpanId");
       if(assetMaterialTypeSpan != null){
        	assetMaterialTypeSpan.innerHTML = asset.materialCategory;
       }
    }
   if(assetType == 'world')
   {
        var assetWorldSizeSpan = document.getElementById("assetWorldSizeSpanId");
        assetWorldSizeSpan.innerHTML = asset.worldSize;
        
        var assetNoOfLotsSpan = document.getElementById("assetNoOfLotsSpanId");
        assetNoOfLotsSpan.innerHTML = asset.numberOfLots;
        
        var assetworldResidentsSpan = document.getElementById("assetworldResidentsSpanId");
        assetworldResidentsSpan.innerHTML = asset.worldResidents;
      
    }
    
    
   if(assetType == 'household')
   {
        var assetHouseholdResidentsSpan = document.getElementById("assetHouseholdResidentsSpanId");
        assetHouseholdResidentsSpan.innerHTML = asset.householdResidents;
        
        var assetHouseholdFundsSpan = document.getElementById("assetHouseholdFundsSpanId");
        assetHouseholdFundsSpan.innerHTML = asset.householdFunds;
     
    }
    
   if(assetType == 'CASpart' || assetType == 'preset')
   {
   	   
       var assetCASPartGenderSpan = document.getElementById("assetCASPartGenderSpanId");
       if(assetCASPartGenderSpan != null){
       assetCASPartGenderSpan.innerHTML = asset.gender;
       }
            
       var assetCASPartAgeSpan = document.getElementById("assetCASPartAgeSpanId");
       if(assetCASPartAgeSpan != null){
       assetCASPartAgeSpan.innerHTML = asset.age;
       }
       
       var assetClothingCategorySpan = document.getElementById("assetClothingCategorySpanId");
       if(assetClothingCategorySpan != null)
       {
	       assetClothingCategorySpan.innerHTML = asset.clothingCategory;
	   }
	   var assetClothingTypeSpan = document.getElementById("assetClothingTypeSpanId");
	   if(assetClothingTypeSpan != null)    
	   {
	        assetClothingTypeSpan.innerHTML = asset.clothingType;
       }
       var assetAccessoryTypeSpan = document.getElementById("assetAccessoryTypeSpanId"); 
       if(assetAccessoryTypeSpan != null)
       {
            assetAccessoryTypeSpan.innerHTML = asset.accessoryType;
       }
     
    }
    
    if(assetType == 'object' || assetType == 'preset'){
       var assetObjectTypeSpan = document.getElementById("assetObjectTypeSpanId");
       if(assetObjectTypeSpan != null){
        assetObjectTypeSpan.innerHTML = asset.objectType.truncate(15);
       }
    }

   var assetCountrySpan = document.getElementById("assetCountrySpanId");
   var flagCode = asset.country;
	
	if (flagCode != "AT" && flagCode != "AU" && flagCode != "BE" && flagCode != "BR" && flagCode != "CA" &&
		flagCode != "CH" && flagCode != "CN" && flagCode != "CZ" && flagCode != "DE" && flagCode != "DK" &&
		flagCode != "ES" && flagCode != "FI" && flagCode != "FR" && flagCode != "GB" && flagCode != "GR" &&
		flagCode != "HU" && flagCode != "IE" && flagCode != "IT" && flagCode != "JP" && flagCode != "KR" &&
		flagCode != "MX" && flagCode != "NL" && flagCode != "NO" && flagCode != "NZ" && flagCode != "PL" &&
		flagCode != "PT" && flagCode != "RU" && flagCode != "SE" && flagCode != "TH" && flagCode != "TW" &&
		flagCode != "US" && flagCode != "ZE") {
			flagCode = "OT";
	}
        assetCountrySpan.innerHTML = "<img src='"+sims3CDNUrlPrefix+"images/flags/"+flagCode+".gif'>";
   if(asset.language != 'null')
   {
    assetCountrySpan.innerHTML += ' ' + asset.language;
   }

   var assetDownloadCountSpan = document.getElementById("assetDownloadCount");
   assetDownloadCountSpan.innerHTML = asset.downloadCount;

   var assetRatingCountSpan = document.getElementById("assetRatingCount");
   assetRatingCountSpan.innerHTML = asset.ratingCount;
   
   var addToGameMainDiv = document.getElementById("addToGameMainDivId");
   var downloadImg = document.getElementById("downloadImgId").innerHTML;
   var addToGameLink = document.getElementById("addToGameLinkId").innerHTML;
   
  var addToGameMethodName = getMethodNameForDownload(asset,true); 
  var newDownloadImgLink = "<a id='downloadImgId' href=\""+addToGameMethodName+"\">";
  addToGameMainDiv.innerHTML = newDownloadImgLink + downloadImg + "</a>";
  
  var newAddToGameLink =  "<a id='addToGameLinkId'style='color:#78B800' href=\""+addToGameMethodName+"\">";
  var addToGameDiv = document.getElementById("addToGameDivId");
  addToGameDiv.innerHTML = newAddToGameLink + addToGameLink + "</a>";

}

function getMethodNameForDownload(asset,isAddToGame)
{
   if(! isUserLoggedIn)
    {      
        return "javascript:loginAndDownload('download','"+asset.assetId+"','"+asset.assetPosition+"');";
    }
   if(! isGameRegistered)
    {  
        return "javascript:downloadAsset("+asset.assetId+");";
    }
    if(isAddToGame)
    {
      return "javascript:updateDownloadCountOpenNewWindow("+asset.assetId+",'sims3://download?assetId="+asset.assetId+"');";
    }
    else
    {
      return "javascript:updateDownloadCountOpenNewWindow("+asset.assetId+",'"+asset.assetLocation+"');";
    } 
}
function removeBlogSourceMyblog(blogId)
{
	thisBlogId = blogId;
	popup( 'deleteBlogLayerMyblog' );
	var blogPopup = document.getElementById('deleteBlogLayerMyblog');
	blogPopup.style.marginTop = "180px";
}
function deleteBlogSourceMyblog(){
	document.location="deleteBlog.html?blogId="+thisBlogId+"&source=blogPage";
}

function removeBlogSourceSimPage(blogId)
{
	simPageBlogId = blogId;
	popup('deleteBlogLayerSimPage');
	var blogPopup = document.getElementById('deleteBlogLayerSimPage');
	blogPopup.style.marginTop = "180px";
}
function deleteBlogSourceSimPage(){
	document.location="deleteBlog.html?blogId="+simPageBlogId+"&source=simPage";
}


var jsonrpcClient;
var bookmarkList;
var totalBookmarkCount;
var bookmarkId;
var assetType;

function confirmBookMrkRemove(id,type)
{
	bookmarkId = id;
	assetType = type;
	popup('deleteBookmarkLayer');
	var blogPopup = document.getElementById('deleteBookmarkLayer');
	blogPopup.style.marginTop = "180px";
	
}

function deleteBookMarkById(){

	if(!jsonrpcClient)
	{
		initAJAX();
	}

	jsonrpcClient.Bookmark.removeFromBookmark(bookmarkId,assetType);
	window.location.reload();

}

function removeBookmarkByAssetId(assetId,sourceType)
{
		
	if(!jsonrpcClient)
	{
		initAJAX();
	}
	jsonrpcClient.Bookmark.removeFromBookmark(assetId,sourceType);
	window.location.reload();
	
}

function initAJAX() {	
	jsonrpcClient = new WebRpcClient();
}

function bookmarkCountCallback(result)
{
	totalBookmarkCount = result;	
	createBookmarkDiv();
}

function bookmarkCallback(result,e){
	bookmarkList = result;	
}

function removeShortBookmark(i) {
	jsonrpcClient.Bookmark.removeFromBookmark(bookmarkList.list[i].asset.assetId,bookmarkList.list[i].sourceType);
	var bookmarksDiv = document.getElementById('bookmarksContent');
	bookmarksDiv.innerHTML = "";
	createBookmarkShortView();
}

function createBookmarkDiv() {
	var bookmarksDiv = document.getElementById('bookmarksContent');
	if(bookmarksDiv != null)
	{
		if(bookmarkList)
		{
			var count = bookmarkList.list.length;
			if (count > 5) count = 5;	
			for (var i = 0; i < count; i++ ){
				var newDiv = document.createElement('div');
				newDiv = "<div style='position:relative;padding:5px;'>";
				newDiv += "<table width='260' border='0' cellspacing='2' cellpadding='2'><tr>";
				newDiv += "<td rowspan='3' width='80'><a href='/assetDetail.html?assetId="+bookmarkList.list[i].asset.assetId+"'><img src='"+bookmarkList.list[i].asset.thumbnailImageSrc+"' width='70' height='70' /></a></td>";
				newDiv += "<td><a href='/assetDetail.html?assetId="+bookmarkList.list[i].asset.assetId+"'>"+bookmarkList.list[i].asset.displayName+"</a></td></tr><tr>";
				newDiv += "<td><a href='/"+bookmarkList.list[i].asset.assetCreatorPersonaName+"'>"+bookmarkList.list[i].asset.assetCreatorPersonaName+"</a></td></tr><tr>";
				if (loggedInUser  && (pagePersona == loggedinUserPersona)){
					newDiv += "<td><a href='javascript:removeShortBookmark("+i+")'>"+removeBookmarkText+"</a></td>";
				}
				newDiv += "</tr></table></div>";
				bookmarksDiv.innerHTML += newDiv;
			}
			if( totalBookmarkCount > count)
			{
				var newDiv2 = document.createElement('div');
				newDiv2 = "<div style='width:100%;text-align:right;'><a href='/bookmarks.html?userId="+bookmarkList.list[0].userId+"'>"+showAllLink+"</a></div>";
				bookmarksDiv.innerHTML += newDiv2;
			}
			Effect.BlindDown(bookmarksDiv);	
		}
	}
}

function createBookmarkShortView(){
	if(!jsonrpcClient)
	{
		initAJAX();
	}
	jsonrpcClient.Bookmark.getBookmarksListingForUserByPersonaName(bookmarkCallback,pagePersona);
	jsonrpcClient.Bookmark.getTotalBoomkarksCountForPersona(bookmarkCountCallback,pagePersona);
} 
 var jsonrpcClient;
 var bookmarkPresent;
 var downloadPermitted;
 
 var isFlashReady = false;
var myIntervalId = 0;
var videoUrl = "";


function initContentInfo(contentId,assetType)
{    
	try{ 
		jsonrpcClient = new WebRpcClient();
		bookmarkPresent = new String(jsonrpcClient.Bookmark.isBookmarked(contentId,assetType));
		if (bookmarkPresent == "true")
		{
			hide("addBookmark");
			show("removeBookmark");			
		}
	} catch (e)	{
		alert(" exception caught " + e);	
	}
}
function ratingContent(contentId)
{
    if(! isUserLoggedIn)
    {
       loginAndAction('rating');
       return;
    }
    if(! isGameRegistered)
    {
       notificationProductAndAction('rating');
        return;
   }
   //Omniture info tracking
   var evarString = 'loggedIn='+s_ea.prop1+',assetID='+s_ea.prop40
    	+',secondaryPersona='+s_ea.prop36
    	+',category='+s_ea.prop39;
    setOmniValues(location.href,'recommendMedia',location.href,evarString,'','recommendMedia',0,'','','');
    if(!jsonrpcClient)
	{
		initAJAX();
	}

    var result = jsonrpcClient.Content.rateContent( contentId );
        
    if(result == -1)
    {
        alert(ratedMsg);
    }
    else
    {    
	    totalRatingCount = result;
        hideObject('rate');
        hideObject('rateImage');
	    var rate = document.getElementById('rate');
	    var rateImage = document.getElementById('rateImage');
        var newImageDiv = "";
        newImageDiv += "<img  align='absmiddle'";
        newImageDiv += " src='" + sims3CDNUrlPrefix + "images/recomended.gif' />";
        var nbsp = "&nbsp;";
        document.getElementById('rate').innerHTML = nbsp + result;
        rateImage.innerHTML = newImageDiv;                
	    Effect.BlindDown(rate);
	    Effect.BlindDown(rateImage);
    }
}



/* Movies and More Landing page*/
var contentTypes = ["movies","stories"];
var contentListings = ["mashups","stories"];


function showTabData(whatTab, tabData,contentType,dateRange,localeLanguage){
	document.getElementById("content_type").value = contentTypes[whatTab-1];
	for(var i=1; i<=contentTypes.length; i++){
		if(i==whatTab){
			document.getElementById("movieAndMoreTabBody"+i).style.display="block";
		}else{
			document.getElementById("movieAndMoreTabBody"+i).style.display="none";
			document.getElementById("movieAndMoreTabBody"+i).innerHTML="";			
		}
		//special case of for tabBody1, its not working in Firefox2
		if(whatTab != 1){
			document.getElementById("movieAndMoreTabBody1").style.display="none";
			document.getElementById("movieAndMoreTabBody1").innerHTML="";
		}
	}
	if(whatTab==1){
		document.getElementById("tabHead1").className="selected";
		document.getElementById("tabHead2").className="";
	}else if(whatTab==2){
		document.getElementById("tabHead2").className="selected";
		document.getElementById("tabHead1").className="";
	}
	document.getElementById("movieAndMoreTabBody"+whatTab).innerHTML=tabData;
	if(document.getElementById("moreLink") != null){
		document.getElementById("moreLink").href="/moviesandmore/"+contentListings[whatTab-1]+".html?content_type="+contentType+"&dateRange="+dateRange+"&localeLanguage="+localeLanguage+"&sortBy=views";
	}
	
	document.getElementById('date_range').value = document.getElementById('dateRangeValue').value;
	
	if(document.getElementById('firstContentId').value != 0){
		SelectMashupThumpImg(document.getElementById('firstContentId').value);
	}
}

function showStoryMovieTab(whatTab){
	currentlySelectedTab = whatTab;
	var sel = document.getElementById('date_range');
	var languageControl = document.getElementById('localeLanguage');
	var localeLanguage = languageControl.options[languageControl.selectedIndex].value;
	var content_type = contentTypes[whatTab-1];
	var date_range = sel.options[sel.selectedIndex].value;	
	var url = "/mostViewedMoviesTab.html?content_type="+content_type+"&date_range="+date_range+"&localeLanguage="+localeLanguage;
	
	new Ajax.Request(
		url, {
			method:"get",
			onComplete:function(xml){
				showTabData(whatTab, xml.responseText,content_type,date_range,localeLanguage);
			}
		}
	);
}


function showTabMoviesAndMoreForDate(){
	showStoryMovieTab(currentlySelectedTab)
	
}

function listUserCreatedItems(assetId, userId,filter){
	var url = "/mostViewedMoviesTab.html?content_type="+content_type+"&date_range="+date_range;
	new Ajax.Request(
		url, {
			method:"get",
			onComplete:function(xml){
				showTabData(whatTab, xml.responseText,content_type,date_range,localeLanguage);
			}
		}
	);
}


function hideContent(contentId)
{
    var hideStatusChanged = new String(jsonrpcClient.Content.hideContent(contentId));
    if(hideStatusChanged)
    {
        Effect.toggle("hideContent","appear",{duration:0.01});
        Effect.toggle("unhideContent","appear",{duration:1.0});
    }
    else
    {
        alert(" Hide Content failed ... ");
    }
}

function unhideContent(contentId)
{
    try {
    var hideStatusChanged = new String(jsonrpcClient.Content.unhideContent(contentId));
    } catch (e) {
        alert (e);
    }
    if(hideStatusChanged)
    {
        Effect.toggle("unhideContent","appear",{duration:0.01});
        Effect.toggle("hideContent","appear",{duration:1.0});
    }
    else
    {
        alert(" Unhide Content failed ... ");
    }
}

function deleteContent(contentId)
{
    var deleteStatusChanged = new String(jsonrpcClient.Content.removeContent(contentId));
    if(deleteStatusChanged)
    {
        Effect.toggle("deleteContent","appear",{duration:0.01});
        Effect.toggle("undeleteContent","appear",{duration:1.0});
    }
    else
    {
        alert(" Delete content failed ... ");
    }
}

function undeleteContent(contentId)
{
    try {
    var deleteStatusChanged = new String(jsonrpcClient.Content.undeleteContent(contentId));
    } catch (e) {
        alert (e);
    }
    if(deleteStatusChanged)
    {
        Effect.toggle("undeleteContent","appear",{duration:0.01});
        Effect.toggle("deleteContent","appear",{duration:1.0});
    }
    else
    {
        alert(" Undelete content failed ... ");
    }
}
//var assetList;
//var totalAssetCount;

//function assetCountCallback(result)
//{
//	totalAssetCount = result;
//	createAssetListDiv();
//}

//function assetsCallback(result,e){
//	assetList = result;
//}

function confirmRemove(i)
{
	removeAssetId = i;
	popupWide('deleteMyItemLayer');
	var blogPopup = document.getElementById('deleteMyItemLayer');
}

function makeThisMyAvatar(assetId) {
	if(!jsonrpcClient)
	{
		initAJAX();
	}
	jsonrpcClient.AjaxAssetItem.makeThisMyAvatar(refreshWindowCallback, assetId,pagePersona);
}

function makeThisMyAvatarWithPersona(assetId, persona) {
	if(!jsonrpcClient)
	{
		initAJAX();
	}
	jsonrpcClient.AjaxAssetItem.makeThisMyAvatar(refreshWindowCallback,assetId,persona);
}

function refreshWindowCallback()
{
	window.location.reload();
}


function removeAsset() {
	jsonrpcClient.AjaxAssetItem.removeAsset(removeAssetCallback, removeAssetId, loggedinUserPersona);
}

function removeAssetCallback()
{
	var assetsDiv = document.getElementById('assetsContent');
	assetsDiv.innerHTML = "";
	window.location.reload();
}

function removeAssetFromExchangeList() {
	if(!jsonrpcClient)
	{
		initAJAX();
	}
	jsonrpcClient.AjaxAssetItem.removeAsset(refreshWindowCallback,removeAssetId, loggedinUserPersona);
}

function isMyAvatar(assetId){
	return jsonrpcClient.AjaxAssetItem.isThisMyAvatar(assetId,pagePersona);
}

//function createAssetListDiv() {
//	var assetsDiv = document.getElementById('assetsContent');
//	if(assetsDiv != null)
//	{
//		if(assetList)
//		{
//			var count = assetList.list.length;
//			if (count > 5) count = 5;
//
//			if(count==0) {
//				var newDiv = document.createElement('div');
//				newDiv = "<div style='position:relative;padding:5px;'>";
//				newDiv += "<table width='380' border='0' cellspacing='2' cellpadding='2'><tr><td>";
//				newDiv += noAssetsFoundText+"</td></tr></table></div>";
//				assetsDiv.innerHTML += newDiv;
//			}
//
//			for (var i = 0; i < count; i++ ){
//				var newDiv = document.createElement('div');
//				newDiv = "<div style='position:relative;padding:5px;'>";
//				newDiv += "<table width='380' border='0' cellspacing='2' cellpadding='2'><tr>";
//				newDiv += "<td rowspan='4' width='80'><a href='"+contextPath+"/assetDetail.html?assetId="+assetList.list[i].assetId+"'><img src='"+assetList.list[i].thumbnailUrl+"' width='70' height='70' /></a></td>";
//				newDiv += "<td><b>"+assetNameLabel+"</b>: <a href='"+contextPath+"/assetDetail.html?assetId="+assetList.list[i].assetId+"'>"+assetList.list[i].displayName+"</a></td></tr><tr>";
//				newDiv += "<td><b>"+assetDateCreatedLabel+"</b>: "+assetList.list[i].createdAt+"</td></tr>";
//				if (assetList.list[i].userCanDeleteAsset)
//				{
//					if(assetList.list[i].isValidForAvatar)
//					{
//						if(assetList.list[i].isThumbnailUserAvatar){
//							newDiv += "<tr><td>"+thisIsMyAvatarText+"</td></tr>";
//						}else{
//							newDiv += "<tr><td>"+"<a href='javascript:makeThisMyAvatar("+assetList.list[i].assetId+")'>"+makeThisMyAvatarText+"</a></td></tr>";
//						}
//					}
//					newDiv += "<tr><td>"+"<a href='javascript:confirmRemove("+assetList.list[i].assetId+")'>"+removeAssetText+"</a></td></tr>";
//				}
//				newDiv += "</table></div>";
//				assetsDiv.innerHTML += newDiv;
//			}
//			if( totalAssetCount > count)
//			{
//				var newDiv2 = document.createElement('div');
//				newDiv2 = "<div style='width:100%;text-align:right;'><a href='"+contextPath+"/userExchange.html?userId="+assetList.list[0].userId+"'><b>"+showAllAssetLink+"</b></a></div>";
//				assetsDiv.innerHTML += newDiv2;
//			}
//			Effect.BlindDown(assetsDiv);
//		}
//	}
//}

//function createAssetsShortView() {
//	if(!jsonrpcClient)
//	{
//		initAJAX();
//	}
//	jsonrpcClient.AjaxAssetItem.getAssetsForUser(assetsCallback,pagePersona);
//	jsonrpcClient.AjaxAssetItem.getTotalAssetCountForUser(assetCountCallback,pagePersona);
//} 

var removeContentId;

function confirmRemoveContent(i)
{
	
	removeContentId = i;				
	popupWide('deleteContentLayer');
	var blogPopup = document.getElementById('deleteContentLayer');
}

function refreshWindowCallback()
{
	window.location.reload();
}

function removeContentList() {
	if(jsonrpcClient == null)
 	jsonrpcClient = new WebRpcClient();
	jsonrpcClient.Content.removeContent(refreshWindowCallback,removeContentId);
}

var removeMediaId;

function confirmRemoveMedia(i)
{	
	removeMediaId = i;				
	popupWide('deleteMediaLayer');
	var blogPopup = document.getElementById('deleteMediaLayer');
}

function removeMediaList() {
	if(jsonrpcClient == null)
 	jsonrpcClient = new WebRpcClient();
	jsonrpcClient.Media.removeMedia(refreshWindowCallback,removeMediaId);
}
function showTabFromTwo(whatTab){
      if (whatTab == 1){
            document.getElementById('tabBody14simDeExg').style.display = 'block';
            document.getElementById('tabBody24simDeExg').style.display = 'none';
            document.getElementById('detailsTabs14simDeExg').style.color = '#333333';
            document.getElementById('detailsTabs24FromTwoTabs').style.color = '#D9D9D9';
            document.getElementById('detailsTabsFromTwoTabs').style.background = 'url(/images/tab1newAvatar.jpg)';
      }

      else if (whatTab == 2){
            document.getElementById('tabBody14simDeExg').style.display = 'none';
            document.getElementById('tabBody24simDeExg').style.display = 'block';
            document.getElementById('detailsTabs14simDeExg').style.color = '#D9D9D9';
            document.getElementById('detailsTabs24FromTwoTabs').style.color = '#333333';
            document.getElementById('detailsTabsFromTwoTabs').style.background = 'url(/images/tab2newAvatar.jpg)';
      }
}

function submitMyForm()
{
	document.forms['myform'].submit();
}


/* word wrap - text area */
var ijk = 0; 
function txt_ara() 
{ 
	if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)) 
	{ 
		if(document.getElementById("aboutMe").value.length <= 38) 
		{ 
			if(document.getElementById("aboutMe").value.length == 38) 
			{ 
			document.getElementById("aboutMe").value += "\n"; 
			} 
		} 
		else 
		{ 
			var lkm = ""; 
			if(ijk == 0) 
			{ 
				lkm = parseInt(document.getElementById("aboutMe").value.length % 78); 
			} 
			else 
			{ 
				lkm = parseInt(document.getElementById("aboutMe").value.length % 39); 
			} 
			if(lkm == 0) 
			{ 
				ijk = 1; 
				document.getElementById("aboutMe").value += "\n"; 
			} 
		} 
	} 
return true; 
} 

function back(itemType,itemId){
    if(itemType=='CONTENT')
    {
        window.document.location = '/contentDetail.html?contentId='+ itemId;
    }
    else if(itemType=='ASSET')
    {
         window.document.location = '/assetDetail.html?assetId='+ itemId;
    }
}

function initWebHomeLayoutDivs(){
	hideObject('transparentLayer');
	hideObject('loginLayer');

	if (launcher_web_persona_Layer){
		showObject('regLayerWeb');
		showObject('transparentLayer');
	}
}
	
	
function hideRegistraionWeb(){
	hideObject('productCodeNotificationLayerWeb');
	hideObject('regLayerWeb');
	hideObject('transparentLayer');
}
	
function refreshFields(contextPath){
	document.forms[0].reset();
	//contextPath="<sims3:sims3urlvalue='home.html'/>"
	updateParent(contextPath);
	//hideLogin();
}

var IE6;
if (window.XMLHttpRequest) {
  IE6 = false;
} else {
  IE6 = true;
}

function showNavItemBorder(num,hasSub){
	document.getElementById("navMid"+num).className = "visible";
	showDropDown(num,hasSub);
}

function showDropDown(num,hasSub){
    var persona=getCookie("PERSONA_NAME");//dont use readCookie here
    if (!persona && num==3)return;//3 represent my page..todo refactor later
    if (hasSub){
    	document.getElementById("navMid"+num).className = "visible_sub";
		document.getElementById("dropdown"+num).style.display = "block";
		/*offset = ((document.getElementById("navMid"+num).clientWidth - 100)/2)+'px'; 
		document.getElementById("dropdown"+num).style.marginLeft = offset; */
		hideSelects("hidden");
	}
}

function hideNavItemBorder(num,hasSub){
	document.getElementById("navMid"+num).className = "";
	hideDropDown(num,hasSub);
}

function hideDropDown(num,hasSub){
	if (hasSub){
		document.getElementById("dropdown"+num).style.display = "none";
		hideSelects("visible");
	}
}

function restoreNavItemBorder(num,hasSub){
	document.getElementById("navMid"+num).className = "visible";
}
/*
 * JSON-RPC JavaScript client
 *
 * $Id: jsonrpc.js,v 1.1 2006/05/13 20:50:02 aldrin Exp $
 *
 * Copyright (c) 2003-2004 Jan-Klaas Kollhof
 * Copyright (c) 2005 Michael Clark, Metaparadigm Pte Ltd
 *
 * This code is based on Jan-Klaas' JavaScript o lait library (jsolait).
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public (LGPL)
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details: http://www.gnu.org/
 *
 */


// escape a character 

function escapeJSONChar(c)
{
    if(c == "\"" || c == "\\") return "\\" + c;
    else if (c == "\b") return "\\b";
    else if (c == "\f") return "\\f";
    else if (c == "\n") return "\\n";
    else if (c == "\r") return "\\r";
    else if (c == "\t") return "\\t";
    var hex = c.charCodeAt(0).toString(16);
    if(hex.length == 1) return "\\u000" + hex;
    else if(hex.length == 2) return "\\u00" + hex;
    else if(hex.length == 3) return "\\u0" + hex;
    else return "\\u" + hex;
}


// encode a string into JSON format

function escapeJSONString(s)
{
    // The following should suffice but Safari's regex is b0rken
    // (doesn't support callback substitutions)
    //
    //   return "\"" + s.replace(/([^\u0020-\u007f]|[\\\"])/g,
    //                           escapeJSONChar) + "\"";

    // Rather inefficient way to do it
    var parts = s.split("");
    for(var i=0; i < parts.length; i++) {
	var c =parts[i];
	if(c == '"' ||
	   c == '\\' ||
	   c.charCodeAt(0) < 32 ||
	   c.charCodeAt(0) >= 128)
	    parts[i] = escapeJSONChar(parts[i]);
    }
    return "\"" + parts.join("") + "\"";
}


// Marshall objects to JSON format

function toJSON(o)
{
    if(o == null) {
	return "null";
    } else if(o.constructor == String) {
	return escapeJSONString(o);
    } else if(o.constructor == Number) {
	return o.toString();
    } else if(o.constructor == Boolean) {
	return o.toString();
    } else if(o.constructor == Date) {
    	return '{javaClass: "java.util.Date", time: ' + o.valueOf() +'}';
    } else if(o.constructor == Array) {
	var v = [];
	for(var i = 0; i < o.length; i++) v.push(toJSON(o[i]));
	return "[" + v.join(", ") + "]";
    } else {
	var v = [];
	for(attr in o) {
	    if(o[attr] == null) v.push("\"" + attr + "\": null");
	    else if(typeof o[attr] == "function"); // skip
	    else v.push(escapeJSONString(attr) + ": " + toJSON(o[attr]));
	}
	return "{" + v.join(", ") + "}";
    }
}


// JSONRpcClient constructor

JSONRpcClient = function JSONRpcClient_ctor(serverURL, user, pass, objectID)
{
    this.serverURL = serverURL;
    this.user = user;
    this.pass = pass;
    this.objectID = objectID;
    
    // Add standard methods
    if(this.objectID) {
	this._addMethods(["listMethods"]);
	var req = this._makeRequest("listMethods", []);
    } else {
	this._addMethods(["system.listMethods"]);
	var req = this._makeRequest("system.listMethods", []);
    }
    var m = this._sendRequest(req);
    this._addMethods(m);
}


// JSONRpcCLient.Exception

JSONRpcClient.Exception =
function JSONRpcClient_Exception_ctor(code, message, javaStack)
{
    this.code = code;
    var name;
    if(javaStack) {
	this.javaStack = javaStack;
	var m = javaStack.match(/^([^:]*)/);
	if(m) name = m[0];
    }
    if(name) this.name = name;
    else this.name = "JSONRpcClientException";
    this.message = message;
}

JSONRpcClient.Exception.CODE_REMOTE_EXCEPTION = 490;
JSONRpcClient.Exception.CODE_ERR_PARSE = 590;
JSONRpcClient.Exception.CODE_ERR_NOMETHOD = 591;
JSONRpcClient.Exception.CODE_ERR_UNMARSHALL = 592;
JSONRpcClient.Exception.CODE_ERR_MARSHALL = 593;

JSONRpcClient.Exception.prototype = new Error();

JSONRpcClient.Exception.prototype.toString =
function JSONRpcClient_Exception_toString(code, msg)
{
    return this.name + ": " + this.message;
}


// Default top level exception handler

JSONRpcClient.default_ex_handler =
function JSONRpcClient_default_ex_handler(e) { alert(e); }


// Client settable variables

JSONRpcClient.toplevel_ex_handler = JSONRpcClient.default_ex_handler;
JSONRpcClient.profile_async = false;
JSONRpcClient.max_req_active = 1;
JSONRpcClient.requestId = 1;


// JSONRpcClient implementation

JSONRpcClient.prototype._createMethod =
function JSONRpcClient_createMethod(methodName)
{
    var fn=function()
    {
	var args = [];
	var callback = null;
	for(var i=0;i<arguments.length;i++) args.push(arguments[i]);
	if(typeof args[0] == "function") callback = args.shift();
	var req = fn.client._makeRequest.call(fn.client, fn.methodName,
					     args, callback);
	if(callback == null) {
	    return fn.client._sendRequest.call(fn.client, req);
	} else {
	    JSONRpcClient.async_requests.push(req);
	    JSONRpcClient.kick_async();
	    return req.requestId;
	}
    }
    fn.client = this;
    fn.methodName = methodName;
    return fn;
}

JSONRpcClient.prototype._addMethods =
function JSONRpcClient_addMethods(methodNames)
{
    for(var i=0; i<methodNames.length; i++) {
	var obj = this;
	var names = methodNames[i].split(".");
	for(var n=0; n<names.length-1; n++){
	    var name = names[n];
	    if(obj[name]){
		obj = obj[name];
	    } else {
		obj[name]  = new Object();
		obj = obj[name];
	    }
	}
	var name = names[names.length-1];
	if(!obj[name]){
	    var method = this._createMethod(methodNames[i]);
	    obj[name] = method;
	}
    }
}

JSONRpcClient._getCharsetFromHeaders =
function JSONRpcClient_getCharsetFromHeaders(http)
{
    try {
	var contentType = http.getResponseHeader("Content-type");
	var parts = contentType.split(/\s*;\s*/);
	for(var i =0; i < parts.length; i++) {
	    if(parts[i].substring(0, 8) == "charset=")
		return parts[i].substring(8, parts[i].length);
	}
    } catch (e) {}
    return "UTF-8"; // default
}

// Async queue globals
JSONRpcClient.async_requests = [];
JSONRpcClient.async_inflight = {};
JSONRpcClient.async_responses = [];
JSONRpcClient.async_timeout = null;
JSONRpcClient.num_req_active = 0;

JSONRpcClient._async_handler =
function JSONRpcClient_async_handler()
{
    JSONRpcClient.async_timeout = null;

    while(JSONRpcClient.async_responses.length > 0) {
	var res = JSONRpcClient.async_responses.shift();
	if(res.canceled) continue;
	if(res.profile) res.profile.dispatch = new Date();
	try {
	    res.cb(res.result, res.ex, res.profile);
	} catch(e) {
	    JSONRpcClient.toplevel_ex_handler(e);
	}
    }

    while(JSONRpcClient.async_requests.length > 0 &&
	  JSONRpcClient.num_req_active < JSONRpcClient.max_req_active) {
	var req = JSONRpcClient.async_requests.shift();
	if(req.canceled) continue;
	req.client._sendRequest.call(req.client, req);
    }
}

JSONRpcClient.kick_async =
function JSONRpcClient_kick_async()
{
    if(JSONRpcClient.async_timeout == null)
	setTimeout(JSONRpcClient._async_handler, 0);
}

JSONRpcClient.cancelRequest =
function JSONRpcClient_cancelRequest(requestId)
{
    // If it is in flight then mark it as canceled in the inflight map
    // and the XMLHttpRequest callback will discard the reply.
    if(JSONRpcClient.async_inflight[requestId]) {
	JSONRpcClient.async_inflight[requestId].canceled = true;
	return true;
    }

    // If its not in flight yet then we can just mark it as canceled in
    // the the request queue and it will get discarded before being sent.
    for(var i in JSONRpcClient.async_requests) {
	if(JSONRpcClient.async_requests[i].requestId == requestId) {
	    JSONRpcClient.async_requests[i].canceled = true;
	    return true;
	}
    }

    // It may have returned from the network and be waiting for its callback
    // to be dispatched, so mark it as canceled in the response queue
    // and the response will get discarded before calling the callback.
    for(var i in JSONRpcClient.async_responses) {
	if(JSONRpcClient.async_responses[i].requestId == requestId) {
	    JSONRpcClient.async_responses[i].canceled = true;
	    return true;
	}
    }

    return false;
}

JSONRpcClient.prototype._makeRequest =
function JSONRpcClient_makeRequest(methodName, args, cb)
{
    var req = {};
    req.client = this;
    req.requestId = JSONRpcClient.requestId++;

    var obj = {};
    obj.id = req.requestId;
    if (this.objectID)
	obj.method = ".obj#" + this.objectID + "." + methodName;
    else
	obj.method = methodName;
    obj.params = args;

    if (cb) req.cb = cb;
    if (JSONRpcClient.profile_async)
	req.profile = { "submit": new Date() };
    req.data = toJSON(obj);

    return req;
}

JSONRpcClient.prototype._sendRequest =
function JSONRpcClient_sendRequest(req)
{
    if(req.profile) req.profile.start = new Date();

    // Get free http object from the pool
    var http = JSONRpcClient.poolGetHTTPRequest();
    JSONRpcClient.num_req_active++;

    // Send the request
    http.open("POST", this.serverURL, (req.cb != null), this.user, this.pass);

    // setRequestHeader is missing in Opera 8 Beta
    try { http.setRequestHeader("Content-type", "text/plain"); } catch(e) {}

    // Construct call back if we have one
    if(req.cb) {
	var self = this;
	http.onreadystatechange = function() {
	    if(http.readyState == 4) {
		http.onreadystatechange = function (){};
		var res = { "cb": req.cb, "result": null, "ex": null};
		if (req.profile) {
		    res.profile = req.profile;
		    res.profile.end = new Date();
		}
		try { res.result = self._handleResponse(http); }
		catch(e) { res.ex = e; }
		if(!JSONRpcClient.async_inflight[req.requestId].canceled)
		    JSONRpcClient.async_responses.push(res);
		delete JSONRpcClient.async_inflight[req.requestId];
		JSONRpcClient.kick_async();
	    }
	};
    } else {
	http.onreadystatechange = function() {};
    }

    JSONRpcClient.async_inflight[req.requestId] = req;
    http.send(req.data);

    if(!req.cb) return this._handleResponse(http);
}

JSONRpcClient.prototype._handleResponse =
function JSONRpcClient_handleResponse(http)
{
    // Get the charset
    if(!this.charset) {
	this.charset = JSONRpcClient._getCharsetFromHeaders(http);
    }

    // Get request results
    var status = http.status;
    var statusText = http.statusText;
    var data = http.responseText;

    // Return http object to the pool;
    JSONRpcClient.poolReturnHTTPRequest(http)
    JSONRpcClient.num_req_active--;

    // Unmarshall the response
    if(status != 200) {
	throw new JSONRpcClient.Exception(status, statusText);
    }
    var obj;
    try {
	eval("obj = " + data);
    } catch(e) {
	throw new JSONRpcClient.Exception(550, "error parsing result");
    }
    if(obj.error)
	throw new JSONRpcClient.Exception(obj.error.code, obj.error.msg,
					  obj.error.trace);
    var res = obj.result;

    // Handle CallableProxy
    if(res && res.objectID && res.JSONRPCType == "CallableReference")
	return new JSONRpcClient(this.serverURL, this.user,
				 this.pass, res.objectID);

    return res;
}


// XMLHttpRequest wrapper code

// XMLHttpRequest pool globals
JSONRpcClient.http_spare = [];
JSONRpcClient.http_max_spare = 8;

JSONRpcClient.poolGetHTTPRequest =
function JSONRpcClient_pool_getHTTPRequest()
{
    if(JSONRpcClient.http_spare.length > 0) {
	return JSONRpcClient.http_spare.pop();
    }
    return JSONRpcClient.getHTTPRequest();
}

JSONRpcClient.poolReturnHTTPRequest =
function JSONRpcClient_poolReturnHTTPRequest(http)
{
    if(JSONRpcClient.http_spare.length >= JSONRpcClient.http_max_spare)
	delete http;
    JSONRpcClient.http_spare.push(http);
}

JSONRpcClient.msxmlNames = [ "MSXML2.XMLHTTP.5.0",
			     "MSXML2.XMLHTTP.4.0",
			     "MSXML2.XMLHTTP.3.0",
			     "MSXML2.XMLHTTP",
			     "Microsoft.XMLHTTP" ];

JSONRpcClient.getHTTPRequest =
function JSONRpcClient_getHTTPRequest()
{
    // Mozilla XMLHttpRequest
    try {
	JSONRpcClient.httpObjectName = "XMLHttpRequest";
	return new XMLHttpRequest();
    } catch(e) {}

    // Microsoft MSXML ActiveX
    for (var i=0;i < JSONRpcClient.msxmlNames.length; i++) {
	try {
	    JSONRpcClient.httpObjectName = JSONRpcClient.msxmlNames[i];
	    return new ActiveXObject(JSONRpcClient.msxmlNames[i]);
	} catch (e) {}
    }

    // None found
    JSONRpcClient.httpObjectName = null;
    throw new JSONRpcClient.Exception(0, "Can't create XMLHttpRequest object");
}

var action = "";
var assetId = "";
    
function loginAndAction(theAction){
	action = theAction;
	//Setting cookies. This is done here as the Login URL changes from HTTP to HTTPS
    checkAction();
	if(theAction != "")
	{	   
	   if(action == 'redirectToMypage')
	   {		  
		   usageLauncher=false;
		   redirectToMypage = true;
	   }
	   document.getElementById("loginFrame").src= actionNeedsLoginUrl;
	}	
	popup('loginLayer');
}


function refreshFields(contextPath){
	document.forms[0].reset();
	document.getElementById("error").innerHTML = "";
	parent.popup('loginLayer');
}


function checkAction(){
	if(typeof(ajaxLoader) != 'undefined')
	{
	document.getElementById("ajaxLoader").style.display="block";
	}
	try{
	if (parent!=null && parent.action!=null){
		createCookie("action", parent.action, 1);
	}
	if (parent!=null && parent.assetId!=null){
        createCookie("assetId", parent.assetId, 1);
    }
    }catch(e) {
    	//do nothing; this is to fix the cross domain js error;while
    	//JS call is made from HTTP to HTTPS by invoking window.action	
    }
	return true;
}


function showLoginMsg(msg){
	frames['loginFrame'].document.getElementById("error").innerHTML = msg;
}

function loginAndDownload(theAction,theAssetId){
	if (document.getElementById("containsStoreItemsPresetPopup") != null && document.getElementById("containsStoreItemsPresetPopup").style.display == "block") {
		popup("containsStoreItemsPresetPopup");
	}
    action = theAction;
    assetId = theAssetId;
    //Setting cookies. This is done here as the Login URL changes from HTTP to HTTPS
    checkAction();
    if(theAction != "")
    {
       document.getElementById("loginFrame").src= actionNeedsLoginUrl;
    }
    popup('loginLayer');
}
function showObject(id){
	if( undefined != document.getElementById(id))
	{
		document.getElementById(id).style.display='block';
	} 
}

function hideObject(id){
	if( undefined != document.getElementById(id))
	{
		document.getElementById(id).style.display='none';
	}
}

function fakeCombo(x,e,dropboxId){
	var S = document.getElementById(dropboxId);
	var L = S.options.length;
	var found = false;
	var myIndex = 0;
	var keycode;
	if (navigator.appName == "Microsoft Internet Explorer"){
		keycode = e.keyCode;
	}
	else{
		keycode = e.which
	}
	if (keycode == 13){
		for (var i=0; i <= L-1; i++){
			if (x.value == S.options[i].value){
				found = true;
				myIndex = i
			};
		}
		if (found){
			S.options.selectedIndex = myIndex;
		}
		else{
			S.options[S.options.length] = new Option(x.value,x.value);
			S.options.selectedIndex = (S.options.length - 1);
		}
		return false;
	}
}

function mySelect(x,textboxId){
    if(x.selectedIndex==0)
    {
    document.getElementById(textboxId).value='';
    return;
    }
	document.getElementById(textboxId).value = x.options[x.selectedIndex].value;
}

function refreshCaptchaImage(url){
	var randomnumber=Math.floor(Math.random()*11)
	var imageContainer = document.getElementById("captchaImageContainer");
	var userInputSection = document.getElementById("userInputSecurityKeyDiv");
	var img = imageContainer.getElementsByTagName("img")[0];
	var securityField = userInputSection.getElementsByTagName("input")[0];
	securityField.value = '';
	img.setAttribute("alt", "macg");
	img.setAttribute("src",url + "?param="+randomnumber);
}

function enableObject(objectId,conditionObjectId){
	if(document.getElementById(conditionObjectId).checked){
		document.getElementById(objectId).disabled=false;
	}
	else{
		document.getElementById(objectId).disabled=true;
	}
}

function refreshFields(contextPath){
	document.forms[0].reset();
	contextPath="<sims3:sims3url value='launcher/home.html'/>"
	updateParent(contextPath);
	hideLogin();
}

function updateParent (contextPath){
	window.document.location = contextPath;
}

function goToPage(url){
	window.document.location = url;
}

function checkObject(chkboxId){
	document.getElementById(chkboxId).checked=true;
}

function uncheckObject(chkboxId){
	document.getElementById(chkboxId).checked=false;
}

function selectAllChkBox(checkAllobject,chkboxList){
	var chkboxArray=new Array();
	chkboxArray = document.getElementsByName(chkboxList);
	var i=0;
	if(checkAllobject.checked){
		for(i=0;i<chkboxArray.length;i++){
			chkboxArray[i].checked=true;
		}
	}
	else{
		for(i=0;i<chkboxArray.length;i++){
			chkboxArray[i].checked=false;
		}
	}
}

function enableDeleteButton(chkboxList,targetButtonId){
	var chkboxArray=new Array();
	chkboxArray = document.getElementsByName(chkboxList);
	var j=0;
	var flag=false;
	for(j=0;j<chkboxArray.length;j++){
		if(chkboxArray[j].checked==true){
			flag=true;
		}
	}
	if(flag){
		document.getElementById(targetButtonId).disabled=false;
	}
	else{
		document.getElementById(targetButtonId).disabled=true;
	}
}

function submitForm(formName,action){
	alert(formName);
	document.formName.submit();
}

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=/";
}

function readCookie(name){
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	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;
}

var WebRpcClient = function(){
	var instance = null;
return function(){
	if(instance == null)
	instance = new JSONRpcClient(urlPrefix + "ajax.html", null, null, null);
	return instance;
};
}
();
var LauncherRpcClient = function(){
	var instance = null;
return function(){
	if(instance == null)
	instance = new JSONRpcClient(urlPrefix +"launcher/ajax.html", null, null, null);
	return instance;
};
}
();

function eraseCookie(name){
	createCookie(name,"",-1);
}

function disable(objectId){
	document.getElementById(objectId).disabled=true;
}

function enable(objectId){
	document.getElementById(objectId).disabled=false;
}

sfFocus = function(){
	var sfEls = document.getElementsByTagName("INPUT");
	for (var i=0; i<sfEls.length; i++){
		sfEls[i].onfocus=function(){
			this.className+=" sffocus";
		}
		sfEls[i].onblur=function(){
			this.className=this.className.replace(new RegExp(" sffocus\\b"), "");
		}
	}
}

if (window.attachEvent) window.attachEvent("onload", sfFocus);

function popupNewWindow(url){
	window.open(urlPrefix+url);
}

function findPosX(id){
	var targetId='inv_'+id;
	obj= document.getElementById(id);
	var curleft = 0;
	if(obj.offsetParent)
	while(1){
		curleft += obj.offsetLeft;
		if(!obj.offsetParent)
		break;
		obj = obj.offsetParent;
	}
	else if(obj.x)
	curleft += obj.x;
	document.getElementById(targetId).style.left=curleft + "px";
	document.getElementById(targetId).style.height=document.getElementById(id).style.height;
}

function findPosY(id){
	var targetId='inv_'+id;
	obj= document.getElementById(id);
	var curtop = 0;
	if(obj.offsetParent)
	while(1){
		curtop += obj.offsetTop;
		if(!obj.offsetParent)
		break;
		obj = obj.offsetParent;
	}
	else if(obj.y)
	curtop += obj.y;
	document.getElementById(targetId).style.top=curtop + "px";
	document.getElementById(targetId).style.display='block';
}

function limitMaxLength(object){
	var maxChar = object.getAttribute("maxlength");
	if (object.value.length > maxChar){
		object.value = object.value.substring(0, maxChar);
	}
}

function translateDefaultStrings(keys){
	var jsonrpcClient = new WebRpcClient();
	var result = jsonrpcClient.AjaxAssetItem.translateCommaSeparatedStrings(keys);
	return result;
}

function check_TextArea_length(textArea,maxLen,msg,charLeftDiv,charLeftMsg)
{
	if (textArea.value.length > maxLen) {		
		alert(msg);
		textArea.value = my_form.my_text.value.substring(0, maxLen);
	}
	else
	{
		if(textArea.value.length > 0)
		{
			charLeftDiv.innerHTML = (maxLen - textArea.value.length) + " " + charLeftMsg;
		}
		else if(textArea.value.length == 0)
		{
			charLeftDiv.innerHTML = "";
		}
	}
}

var IE6;
if (window.XMLHttpRequest) {
  IE6 = false;
} else {
  IE6 = true;
}


function sideNavLinkOver(url,num){
	document.getElementById("sideNavLink-"+num).style.background = "url("+url+"images/sideNavGreen.png)";
}

function sideNavLinkOut(url,num){
	document.getElementById("sideNavLink-"+num).style.background = "url("+url+"images/sideNavBlue.png)";
}

var contentType;
function openEdit( id, type )
{ 
	contentType = type;	// MASHUPS or STORIES
	popupWide("editSharePopup");
	document.getElementById("editShareFrame").src = "/moviesandmore/popup/editmashup.html?mashupId=" + id;
}

function openShare(id,type){
	//Omniture info tracking
	var evarString = 'loggedIn='+s_ea.prop1+',assetID='+s_ea.prop40
    	+',secondaryPersona='+s_ea.prop36
    	+',category='+s_ea.prop39;
    setOmniValues(location.href,'shareMedia',location.href,evarString,'','shareMedia',0,'','','');
   	
	popup("sharePopup");
	if (type == "MASHUPS") {
		document.getElementById("shareFrame").src = "/moviesandmore/editsharemashup.html?mashupId="+id+"&content_type=MASHUPS";
	} else {
		document.getElementById("shareFrame").src = "/moviesandmore/editsharemashup.html?mashupId="+id+"&content_type=STORIES";
	}
}

function openShareAsset(id,name,user,type){
	var evarString = 'loggedIn='+s_ea.prop1+',assetID='+s_ea.prop40
    	+',secondaryPersona='+s_ea.prop36
    	+',category='+s_ea.prop39;
    setOmniValues(location.href,'shareItem',location.href,evarString,'','shareItem',0,'','','');
	popup("sharePopup");
	document.getElementById("shareFrame").src = "/shareAsset.html?assetId="+id+"&assetTitle="+name+"&assetUser="+user+"&asset_type="+type;
}

function fakeCombo(x,e,dropboxId){
	var S = document.getElementById(dropboxId);
	var L = S.options.length;
	var found = false;
	var myIndex = 0;
	var keycode;
	if (navigator.appName == "Microsoft Internet Explorer"){
		keycode = e.keyCode;
	}
	else{
		keycode = e.which
	}
	if (keycode == 13){
		for (var i=0; i <= L-1; i++){
			if (x.value == S.options[i].value){
				found = true;
				myIndex = i
			};
		}
		if (found){
			S.options.selectedIndex = myIndex;
		}
		else{
			S.options[S.options.length] = new Option(x.value,x.value);
			S.options.selectedIndex = (S.options.length - 1);
		}
		return false;
	}
}

function enableObject(objectId,conditionObjectId){
	if(document.getElementById(conditionObjectId).checked){
		document.getElementById(objectId).disabled=false;
	}
	else{
		document.getElementById(objectId).disabled=true;
	}
}

function refreshFields(contextPath){
	document.forms[0].reset();
	contextPath="<sims3:sims3url value='launcher/home.html'/>"
	updateParent(contextPath);
	hideLogin();
}

function updateParent (contextPath){
	window.document.location = contextPath;
}

function goToPage(url){
	window.document.location = url;
}

function checkObject(chkboxId){
	document.getElementById(chkboxId).checked=true;
}

function uncheckObject(chkboxId){
	document.getElementById(chkboxId).checked=false;
}

function selectAllChkBox(checkAllobject,chkboxList){
	var chkboxArray=new Array();
	chkboxArray = document.getElementsByName(chkboxList);
	var i=0;
	if(checkAllobject.checked){
		for(i=0;i<chkboxArray.length;i++){
			chkboxArray[i].checked=true;
		}
	}
	else{
		for(i=0;i<chkboxArray.length;i++){
			chkboxArray[i].checked=false;
		}
	}
}

function enableDeleteButton(chkboxList,targetButtonId){
	var chkboxArray=new Array();
	chkboxArray = document.getElementsByName(chkboxList);
	var j=0;
	var flag=false;
	for(j=0;j<chkboxArray.length;j++){
		if(chkboxArray[j].checked==true){
			flag=true;
		}
	}
	if(flag){
		document.getElementById(targetButtonId).disabled=false;
	}
	else{
		document.getElementById(targetButtonId).disabled=true;
	}
}

function personaResultCallback(result, e){
    if (result)
        $("personaMsg").innerHTML=result.map.message;
        if (result.map.result=="failure")
             $("personaMsg").className="typ_red";
        else
            $("personaMsg").className="blue";
        Effect.BlindDown("personaMsg");    
    return;
}

function personaCheck(){
	var jsonrpcClient = new WebRpcClient();
	jsonrpcClient.Registration.isPersonaAvailable(personaResultCallback,document.getElementById("personaName").value);
	
}

function submitForm(formName,action){
	document.formName.submit();
}

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=/";
}

function readCookie(name){
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	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;
}

var WebRpcClient = function(){
	var instance = null;
return function(){
	if(instance == null)
	instance = new JSONRpcClient(urlPrefix + "ajax.html", null, null, null);
	return instance;
};
}
();
var LauncherRpcClient = function(){
	var instance = null;
return function(){
	if(instance == null)
	instance = new JSONRpcClient(urlPrefix +"launcher/ajax.html", null, null, null);
	return instance;
};
}
();

function eraseCookie(name){
	createCookie(name,"",-1);
}

function disable(objectId){
	document.getElementById(objectId).disabled=true;
}

function enable(objectId){
	document.getElementById(objectId).disabled=false;
}

sfFocus = function(){
	var sfEls = document.getElementsByTagName("INPUT");
	for (var i=0; i<sfEls.length; i++){
		sfEls[i].onfocus=function(){
			this.className+=" sffocus";
		}
		sfEls[i].onblur=function(){
			this.className=this.className.replace(new RegExp(" sffocus\\b"), "");
		}
	}
}

if (window.attachEvent) window.attachEvent("onload", sfFocus);

function popupNewWindow(url){
	window.open(urlPrefix+url);
}

function popupNewWindowFullUrl(url){
	window.open(url);
}

function findPosX(id){
	var targetId='inv_'+id;
	obj= document.getElementById(id);
	var curleft = 0;
	if(obj.offsetParent)
	while(1){
		curleft += obj.offsetLeft;
		if(!obj.offsetParent)
		break;
		obj = obj.offsetParent;
	}
	else if(obj.x)
	curleft += obj.x;
	document.getElementById(targetId).style.left=curleft + "px";
	document.getElementById(targetId).style.height=document.getElementById(id).style.height;
}

function findPosY(id){
	var targetId='inv_'+id;
	obj= document.getElementById(id);
	var curtop = 0;
	if(obj.offsetParent)
	while(1){
		curtop += obj.offsetTop;
		if(!obj.offsetParent)
		break;
		obj = obj.offsetParent;
	}
	else if(obj.y)
	curtop += obj.y;
	document.getElementById(targetId).style.top=curtop + "px";
	document.getElementById(targetId).style.display='block';
}

function limitMaxLength(object){
	var maxChar = object.getAttribute("maxlength");
	if (object.value.length > maxChar){
		object.value = object.value.substring(0, maxChar);
	}
}

function limitMaximumLength(object){
    var maxChar = object.getAttribute("maximumLength");
    if (object.value.length > maxChar){
        object.value = object.value.substring(0, maxChar);
    }
}

function translateDefaultStrings(keys){
	var jsonrpcClient = new WebRpcClient();
	var result = jsonrpcClient.AjaxAssetItem.translateCommaSeparatedStrings(keys);
	return result;
}

function check_TextArea_length(textArea,maxLen,msg,charLeftDiv,charLeftMsg)
{
	if (textArea.value.length > maxLen) {		
		alert(msg);
		textArea.value = my_form.my_text.value.substring(0, maxLen);
	}
	else
	{
		if(textArea.value.length > 0)
		{
			charLeftDiv.innerHTML = (maxLen - textArea.value.length) + " " + charLeftMsg;
		}
		else if(textArea.value.length == 0)
		{
			charLeftDiv.innerHTML = "";
		}
	}
}

var IE6;
if (window.XMLHttpRequest) {
  IE6 = false;
} else {
  IE6 = true;
}


function sideNavLinkOver(url,num){
	if (!IE6)document.getElementById("sideNavLink-"+num).style.background = "url("+url+"images/sideNavGreen.png)";
	else document.getElementById("sideNavLink-"+num).style.background = "url("+url+"images/sideNavGreen.gif)";
}

function sideNavLinkOut(url,num){
	if (!IE6)document.getElementById("sideNavLink-"+num).style.background = "url("+url+"images/sideNavBlue.png)";
	else document.getElementById("sideNavLink-"+num).style.background = "url("+url+"images/sideNavBlue.gif)";
}

function showLayer(windowname) {
	var topMarginLayer=getTopMarginForLayer();
	blanket_size(windowname);
	toggle('blanket');
	document.getElementById(windowname).style.marginTop=topMarginLayer;	
	document.getElementById(windowname).style.display='block';
}

function showPopUpStyleLayer(windowname) {
	var topMarginLayer=getYOffset()+'px';
	blanket_size(windowname);
	toggle('blanket');
	document.getElementById(windowname).style.marginTop=topMarginLayer;	
	document.getElementById(windowname).style.display='block';
}

function cancelRegisteration(contextPath)
{
    window.parent.document.location = contextPath;
}

function getYOffset() {
    var pageY;
    if(typeof(window.pageYOffset)=='number') {
       pageY=window.pageYOffset;
    }
    else {
       pageY=document.documentElement.scrollTop;
    }
    return pageY;
}

function getTopMarginForLayer() {
    var topmargin;
    topmargin=getYOffset()+150+'px'; 
    return topmargin;
}
function wordWrap()
{
    if (window.attachEvent == undefined)
    {
        var tag = document.getElementsByTagName("span");
        for (var i = 0; i < tag.length; i++)
        {
            if (tag.item(i).className == "wordwrap")
            {
                var text = tag.item(i).innerHTML;
                tag.item(i).innerHTML = text.replace(/(.*?)/g, "<wbr />");
            }
        }
    }
}

function wordWrapFF(){
    var larg_total,larg_carac,quant_quebra,pos_quebra;
    var elementos,quem, caracs, texto, display_orig;
    
    elementos = document.getElementsByTagName("p")
    
    for(var i=0; i<elementos.length;i++){
        if(elementos[i].className=="word-wrap"){
            quem = elementos[i];
            
            quem.innerHTML = String(quem.innerHTML).replace(/ /g,"�")
            texto = String(quem.innerHTML)
            
            quem.innerHTML = " "
            
            display_orig = quem.style.display;
            quem.style.display="block";
            larg_oficial = quem.offsetWidth;
            //alert("oficial: " + larg_oficial)
            //alert("display " + quem.style.display)
            if(!document.all) quem.style.display="table";
            //alert("display " + quem.style.display)
            quem.innerHTML = texto;
            larg_total = quem.offsetWidth;
            //alert("total: " + larg_total)
            
            pos_quebra = 0;
            caracs = texto.length;
            texto = texto.replace(/�/g," ")
            larg_carac = larg_total / caracs
            if(larg_total>larg_oficial){
                quant_quebra = parseInt(larg_oficial/larg_carac)
                quant_quebra = quant_quebra - (parseInt(quant_quebra/6)) //quanto menor o num, maior a garantia;
                quem.innerHTML = ""
                while(pos_quebra<=caracs){
				quem.innerHTML = quem.innerHTML + texto.substring(pos_quebra,pos_quebra + quant_quebra) + "<br />"
				pos_quebra = pos_quebra + quant_quebra;
				}
            }else{
                quem.innerHTML = texto;
            }//end if do larg_total>larg_oficial
            quem.style.display = display_orig;
        }//end if do word wrap
    }//end for loop dos elementos
}



function getUserCreatedListItems(itemId, userId,itemType)
{
	var filter = $("filterSorting");
	var selectedSorting = filter.options[filter.selectedIndex].value;
 	var url = "/listUserCreatedItems.html?id="+itemId+"&userId="+userId+"&filter="+selectedSorting+"&itemType="+itemType+"&rand="+Math.random();
	new Ajax.Request(
		url, {
			method:"get",
			onComplete:function(xml){
				$("createdByPod").innerHTML=xml.responseText;
			}
		}
	);
}

function reDirectToMore(persona,itemType){
	var filter = document.getElementById("filterSorting")
	var selectedValue = filter.options[filter.selectedIndex].value;
	var listContentUrl = "";
	if(itemType=='CONTENT'){
		 if(selectedValue == "download_count"){
		 	listContentUrl = "/myContents.html?sortOrderByViewCount=ASC&action=contentSortByViewCount&contentType=MASHUPS&persona="+persona;
		 }else if(selectedValue == "rating_count"){
		 	listContentUrl = "/myContents.html?contentSortByRateCount=ASC&action=contentSortByRateCount&contentType=MASHUPS&persona="+persona;
		 }else if(selectedValue == "created_at"){
		 	listContentUrl = "/myContents.html?sortOrderByPubLishDate=ASC&action=contentSortByPublishDate&contentType=MASHUPS&persona="+persona;
		 }	
	}else{
		listContentUrl = "/userExchange.html?persona="+persona;
	}
	 window.document.location=listContentUrl;
}


// displayTab function is used for implementing tab navigation in the new tab container. 
function displayTab(tabId, tabContainerId, tabClassName){
	var tabContainers = document.getElementById(tabContainerId).parentNode.childNodes;
	for(var i=0; i<tabContainers.length; i++){
		if(tabContainers[i].style){
			tabContainers[i].style.display = "none";
		}
	}
	document.getElementById(tabContainerId).style.display = "block";
	
	var tabs = document.getElementById(tabId).parentNode.childNodes;
	for(var j=0; j<tabs.length; j++){
		tabs[j].className = "";
	}
	document.getElementById(tabId).className = tabClassName;
}
var isShowing  = false;
function toggle(div_id) {
	var el = document.getElementById(div_id);
	if(undefined != el)
	{
		if ( el.style.display == 'none' ) 
		{	
			el.style.display = 'block';
			hideSelects('hidden');
			isShowing = true;
		}
		else 
		{
			el.style.display = 'none';
			hideSelects('visible');
			isShowing = false;
		}		
	}
}
function blanket_size(popUpDivVar) {
	if (typeof window.innerWidth != 'undefined') {
		viewportheight = window.innerHeight;
	} else {
		viewportheight = document.documentElement.clientHeight;
	}
	if ((viewportheight > document.body.parentNode.scrollHeight) && (viewportheight > document.body.parentNode.clientHeight)) {
		blanket_height = viewportheight;
	} else {
		if (document.body.parentNode.clientHeight > document.body.parentNode.scrollHeight) {
			blanket_height = document.body.parentNode.clientHeight;
		} else {
			blanket_height = document.body.parentNode.scrollHeight;
		}
	}
	var blanket = document.getElementById('blanket');
	if(undefined != blanket)
	{
		blanket.style.height = blanket_height + 'px';
	}	
	var popUpDiv = document.getElementById(popUpDivVar);
	popUpDiv_height=blanket_height/2-200;//200 is half popup's height
	if(undefined != popUpDiv)
	{
		popUpDiv.style.top = 35+'px';		
	}
}

function window_pos(popUpDivVar) {
	if (typeof window.innerWidth != 'undefined') {
		viewportwidth = window.innerWidth;
	} else {
		viewportwidth = document.documentElement.clientWidth;
	}
	if ((viewportwidth > document.body.parentNode.scrollWidth) && (viewportwidth > document.body.parentNode.clientWidth)) {
		window_width = viewportwidth;
	} else {
		if (document.body.parentNode.clientWidth > document.body.parentNode.scrollWidth) {
			window_width = document.body.parentNode.clientWidth;
		} else {
			window_width = document.body.parentNode.scrollWidth;
		}
	}
	var popUpDiv = document.getElementById(popUpDivVar);
	window_width=window_width/2-225;//225 is half popup's width
	if(undefined != popUpDiv)
	{
		popUpDiv.style.left = window_width + 'px';		
	}
}

function popup(windowname) {
	if (document.getElementById("swfholder") != null){
		if (document.getElementById("swfholder").style.visibility == "visible")
			document.getElementById("swfholder").style.visibility = "hidden";
		else document.getElementById("swfholder").style.visibility = "visible";
	}
    var topMarginLayer=getYOffset()+'px';
	blanket_size(windowname);
	window_pos(windowname);
    toggle('blanket');
	toggle(windowname);
	document.getElementById(windowname).style.marginTop=topMarginLayer;
	
	if(windowname == 'loginLayer')
	{
	  document.getElementById("forgotLayer").style.marginTop=topMarginLayer;
	
     if(typeof(usageLauncher) == 'undefined' || !usageLauncher)
	  {			 		 
    	 if(typeof(usageLauncher)!='undefined' && redirectToMypage)
 		 {
 			if (isShowing == true)
 				frames['loginFrame'].location.href = "/popup/login.html?actionNeedsLogin=true&redirect=redirectToMypage";
 		 }
 		 else
 		 {	
 		 	if (isShowing == true)
 				frames['loginFrame'].location.href = "/popup/login.html";
 		 }
	  }
     else
	  {  
	  	if (isShowing == true)
    		frames['loginFrame'].location.href = sims3Url + "popup/launcher/login.html";
	  }
	}
	if(windowname == 'forgotLayer')
		frames['forgotFrame'].location.href = "/accounts/popup/forgotpassword.html";	
}

function popupWide(windowname) {
    var topMarginLayer=getYOffset()-210+'px';
	blanket_size2(windowname);
	window_pos2(windowname);
	toggle('blanket');
	document.getElementById(windowname).style.marginTop=topMarginLayer;
	toggle(windowname);		
}

function blanket_size2(popUpDivVar) {
	blanket_height = 1600;
	var blanket = document.getElementById('blanket');
	blanket.style.height = blanket_height + 'px';
	var popUpDiv = document.getElementById(popUpDivVar);
	popUpDiv_height=blanket_height/2-400;//200 is half popup's height
	popUpDiv.style.top = popUpDiv_height + 'px';
}

function window_pos2(popUpDivVar) {
	if (typeof window.innerWidth != 'undefined') {
		viewportwidth = window.innerHeight;
	} else {
		viewportwidth = document.documentElement.clientHeight;
	}
	if ((viewportwidth > document.body.parentNode.scrollWidth) && (viewportwidth > document.body.parentNode.clientWidth)) {
		window_width = viewportwidth;
	} else {
		if (document.body.parentNode.clientWidth > document.body.parentNode.scrollWidth) {
			window_width = document.body.parentNode.clientWidth;
		} else {
			window_width = document.body.parentNode.scrollWidth;
		}
	}
	var popUpDiv = document.getElementById(popUpDivVar);
	window_width=window_width/2-300;//200 is half popup's width
	popUpDiv.style.left = window_width + 'px';
}


function thisMovie(movieName) {
	if (navigator.appName.indexOf("Microsoft") != -1) {
		return window[movieName];
	} else {
		return document[movieName];
	}
}


var isFlashReady = false;
var myIntervalId = 0;
var videoUrl = "";

function flashReady(ready) {
	isFlashReady = true;
}

function openMediaSmall( url )
{
	blanket_size2("media_popup_small");
	window_pos3("media_popup_small");
	var yoffset=getYOffset();
	document.getElementById("media_popup_small").style.marginTop=yoffset-300+'px';
	document.getElementById("media_popup_small").style.marginLeft='50px';
	toggle('blanket');
	toggle("media_popup_small");
	
	if (url == "close")
	{
		document.getElementById("media_div_small").style.display = "none";
		isFlashReady = false;
		videoUrl = "";
		if (document.getElementById("typeSelect") != null){
			document.getElementById("typeSelect").style.visibility = "visible";
		}
	}
	else
	{			
		flashUrl = url;
		document.getElementById("media_div_small").style.display = "block";
		var videoTag = "<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' width='554' height='440' id='media_video_player' align='middle'>" +
		"<param name='allowScriptAccess' value='always' />" +
		"<param name='allowFullScreen' value='false' />" +
		"<param name='movie' value='" + flashUrl + "'/>" +
		"<param name='quality' value='high' />" +
		"<param name='bgcolor' value='#ffffff' />" +
		"<param name='id' value='media_video_player' />" +
		"<embed src='" + flashUrl + "' quality='high' bgcolor='#ffffff' width='554' height='440' name='media_video_player' align='middle' allowScriptAccess='always' allowFullScreen='false' type='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/go/getflashplayer' />" +
		"</object>";
		document.getElementById("media_div_small").style.marginTop = "20px";
		document.getElementById("media_div_small").style.marginLeft = "40px";
		document.getElementById("media_div_small").innerHTML = videoTag;
		myIntervalId = setInterval(loadVideo,100);
		if (document.getElementById("typeSelect") != null)
		{
			document.getElementById("typeSelect").style.visibility = "hidden";
		}
	}
}


function openMedia(url,type,name,playerUrl) {
	blanket_size2("media_popup");
	window_pos3("media_popup");
	var yoffset=getYOffset();
	document.getElementById("media_popup").style.marginTop=yoffset-300+'px';	
	toggle('blanket');
	toggle("media_popup");	
	if (url == "close")
	{
		document.getElementById("media_div").style.display = "none";
		isFlashReady = false;
		videoUrl = "";
		document.getElementById("media_name").innerHTML = "";
		if (document.getElementById("typeSelect") != null)
		{
			document.getElementById("typeSelect").style.visibility = "visible";
		}
		
		if( thisMovie("media_video_player") != undefined )
		{
			thisMovie("media_video_player").stopSendToActionScript( );
		}
	}
	else if (type == "image"){
		document.getElementById("media_div").style.display = "block";
		var imgTag = "<a href='"+url+"' target='_blank'><img src='"+url+"' width='682' height='512' border='0' /></a>";
		document.getElementById("media_div").style.marginTop = "10px";
		document.getElementById("media_div").innerHTML = imgTag;		
		document.getElementById("media_name").innerHTML = name;
		if (document.getElementById("typeSelect") != null){
			document.getElementById("typeSelect").style.visibility = "hidden";
		}
	}
	else if (type == "video"){
		videoUrl = url;
		
		if(!playerUrl) 
		{		
			playerUrl = "/flash/media/media_video_player.swf";
		}
		document.getElementById("media_div").style.display = "block";
		var videoTag = "<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' width='550' height='400' id='media_video_player' align='middle'>" +
		"<param name='allowScriptAccess' value='always' />" +
		"<param name='allowFullScreen' value='false' />" +
		"<param name='movie' value='"+playerUrl+"' />" +
		"<param name='quality' value='high' />" +
		"<param name='bgcolor' value='#ffffff' />" +
		"<param name='id' value='media_video_player' />" +
		"<param name='flashVars' value='cdnUrl="+sims3CDNUrlPrefix+"'/>"+
		"<embed src='"+playerUrl+"' quality='high' bgcolor='#ffffff' flashVars='cdnUrl="+sims3CDNUrlPrefix+"' width='550' height='400' name='media_video_player' align='middle' allowScriptAccess='always' allowFullScreen='false' type='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/go/getflashplayer' />" +
		"</object>";
		document.getElementById("media_div").style.marginTop = "50px";
		document.getElementById("media_div").innerHTML = videoTag;
		var aName = name.split(".");	// the filename with extension is comming in (name.flv)... remove the extension
		if( aName[ 0 ] != null )
		{	
			name = aName[ 0 ];
		}
					
		document.getElementById("media_name").innerHTML = name;		
		myIntervalId = setInterval(loadVideo,100);
		if (document.getElementById("typeSelect") != null){
			document.getElementById("typeSelect").style.visibility = "hidden";
		}
	}
}


function openLotAssetOutPut(str) {
    blanket_size2("worldAsset_popup");
	window_pos3("worldAsset_popup");
	toggle('blanket');
	toggle("worldAsset_popup");
	var yoffset=getYOffset();
	document.getElementById("worldAsset_popup").style.marginTop=yoffset-300+'px';	
    document.getElementById("worldAsset_div").style.display = "block";	
	document.getElementById("worldAsset_div").innerHTML = str;
}

function openWorldAsset(url,type,name) {
    blanket_size2("worldAsset_popup");
	window_pos3("worldAsset_popup");
	toggle('blanket');
	toggle("worldAsset_popup");
	var yoffset=getYOffset();
	document.getElementById("worldAsset_popup").style.marginTop=yoffset-150+'px';
	if (url == "close"){
		document.getElementById("worldAsset_div").style.display = "none";
		isFlashReady = false;
		videoUrl = "";
	}
	else if (type == "image"){
	    document.getElementById("worldAsset_div").style.display = "block";
		var imgTag = "<img src='"+url+"' border='1' width='400' height='400' style='margin-right:125px'/>";
		document.getElementById("worldAsset_div").innerHTML = imgTag;
		document.getElementById("worldAssetImageName_div").innerHTML =name;
		//document.getElementById("worldAssetImageName_div").style.margin ='20px';
	}
}


function openSimAsset1(url,type,name) {
    blanket_size2("worldAsset_popup");
	window_pos3("worldAsset_popup");
	toggle('blanket');
	toggle("worldAsset_popup");
	var yoffset=getYOffset();
	document.getElementById("worldAsset_popup").style.marginTop=yoffset-150+'px';
	if (url == "close"){
		document.getElementById("worldAsset_div").style.display = "none";
		isFlashReady = false;
		videoUrl = "";
	}
	else if (type == "image"){
	    document.getElementById("worldAsset_div").style.display = "block";
		var imgTag = "<img src='"+url+"' border='1' width='400' height='400' style='margin-right:125px'/>";
		document.getElementById("worldAsset_div").innerHTML = imgTag;
		document.getElementById("worldAssetImageName_div").innerHTML =name;
		//document.getElementById("worldAssetImageName_div").style.margin ='20px';
	}
}

function loadVideo() {
	if (isFlashReady) {
		thisMovie("media_video_player").urlSendToActionScript(videoUrl);
		clearInterval(myIntervalId);
	}
}

function window_pos3(popUpDivVar) {
	if (typeof window.innerWidth != 'undefined') {
		viewportwidth = window.innerHeight;
	} else {
		viewportwidth = document.documentElement.clientHeight;
	}
	if ((viewportwidth > document.body.parentNode.scrollWidth) && (viewportwidth > document.body.parentNode.clientWidth)) {
		window_width = viewportwidth;
	} else {
		if (document.body.parentNode.clientWidth > document.body.parentNode.scrollWidth) {
			window_width = document.body.parentNode.clientWidth;
		} else {
			window_width = document.body.parentNode.scrollWidth;
		}
	}
	var popUpDiv = document.getElementById(popUpDivVar);
	window_width=window_width/2-380;//200 is half popup's width
	popUpDiv.style.left = window_width + 'px';
}

function showLayerMiddle(windowname) {
      blanket_size(windowname);
      toggle('blanket');
      document.getElementById(windowname).style.marginTop=150+'px';
      document.getElementById(windowname).style.display='block';
}
function hideLayerMiddle(windowname) {
      hideObject(windowname);
      hideObject ('blanket');
}

var IE6;
if (window.XMLHttpRequest) {
  IE6 = false;
} else {
  IE6 = true;
}
function hideSelects(action) {
	if (IE6){
		if (action != 'visible'){
			action='hidden';
		}
		var x = document.getElementsByTagName("select");	
		for (i = 0; i < x.length; i++) {
			x[i].style.visibility = action;
		}
	}
}
function Pager(tableName, itemsPerPage) {
    this.tableName = tableName;
    this.itemsPerPage = itemsPerPage;
    this.currentPage = 1;
    this.pages = 0;
    this.inited = false;
    
    this.showRecords = function(from, to) {        
        var rows = document.getElementById(tableName).rows;
        // i starts from 1 to skip table header row
        for (var i = 1; i < rows.length; i++) {
            if (i < from || i > to)  
                rows[i].style.display = 'none';
            else
                rows[i].style.display = '';
        }
    }
    
    this.showPage = function(pageNumber) {
    	if (! this.inited) {
    		alert("not inited");
    		return;
    	}

        var oldPageAnchor = document.getElementById('pg'+this.currentPage);
        oldPageAnchor.className = 'pg-normal';
        
        this.currentPage = pageNumber;
        var newPageAnchor = document.getElementById('pg'+this.currentPage);
        newPageAnchor.className = 'pg-selected';
        
        var from = (pageNumber - 1) * itemsPerPage + 1;
        var to = from + itemsPerPage - 1;
        this.showRecords(from, to);
    }   
    
    this.prev = function() {
        if (this.currentPage > 1)
            this.showPage(this.currentPage - 1);
    }
    
    this.next = function() {
        if (this.currentPage < this.pages) {
            this.showPage(this.currentPage + 1);
        }
    }                        
    
    this.init = function() {
        var rows = document.getElementById(tableName).rows;
        var records = (rows.length - 1); 
        this.pages = Math.ceil(records / itemsPerPage);
        this.inited = true;
    }

    this.showPageNav = function(pagerName, positionId) {
    	if (! this.inited) {
    		alert("not inited");
    		return;
    	}
    	var element = document.getElementById(positionId);
    	
    	var pagerHtml = '<span onclick="' + pagerName + '.prev();" class="pg-normal" id="pgPrev"><img border="0" align="absmiddle" src="/images/lftArrow.gif" alt="'+prevString+'" title="'+prevString+'"></span> ';
        for (var page = 1; page <= this.pages; page++) 
            pagerHtml += '<span id="pg' + page + '" class="pg-normal" onclick="' + pagerName + '.showPage(' + page + ');">' + page + '</span> ';
        pagerHtml += '<span onclick="'+pagerName+'.next();" class="pg-normal" id="pgNext"><img border="0" align="absmiddle" src="/images/rtArrow.gif" alt="'+nextString+'" title="'+nextString+'"></span>';            
        
        element.innerHTML = pagerHtml;
    }
}




var isTableBuilt = false;
var selectedPresetAssetId;
var currSelectedPresetNum;
var initPresetId;


function openPresetSlider(presetRefKey,refPackageId,sortField,selectedAssetId){
	selectedPresetAssetId = selectedAssetId;
	initPresetId = selectedAssetId;
	hideSelects('hidden');
	document.getElementById("preset_slide").style.display = "block";
	document.getElementById("open_slider").style.display = "none";
	document.getElementById("close_slider").style.display = "block";
	document.getElementById("creatorModulePod").style.visibility = "hidden";
	document.getElementById("med_ad").style.visibility = "hidden";
	if (!isTableBuilt){
		if(!jsonrpcClient)
	{
		initAJAX();
	}
	jsonrpcClient.PresetList.fetchMatchingObjectPresetsForPreset(presetListingCallback,presetRefKey,refPackageId,sortField);
	}
}

function closePresetSlider(){
	hideSelects('visible');
	if (selectedPresetAssetId != initPresetId){
		location.href = sims3Url + "assetDetail.html?assetId=" + selectedPresetAssetId;
	} else {
		document.getElementById("preset_slide").style.display = "none";
		document.getElementById("open_slider").style.display = "block";
		document.getElementById("close_slider").style.display = "none";
		document.getElementById("creatorModulePod").style.visibility = "visible";
		document.getElementById("med_ad").style.visibility = "visible";
	}
}

var numberOfItems = 0;
var theResult;

function presetListingCallback(result){
	numberOfItems = result.list.length;	
	buildTable(result);
}

function buildTable(result){
	var numberOfRows = Math.ceil(numberOfItems/2);
	var styleClass = "presetSlider";
	var tableTag = "<table width='278' cellpadding='0' cellspacing='0' border='0' id='presets'><th></th>";
	for (i = 0; i < numberOfRows; i++){
		if(undefined != selectedPresetAssetId && selectedPresetAssetId ==  result.list[(i*2)].assetId)
		{
			styleClass = "presetSliderSelected";
			currSelectedPresetNum = i*2;				
		}
		else
		{
			styleClass = "presetSlider";		
		}
		
		tableTag = tableTag + "<tr style='height:136px;'>";
		if (result.list[(i*2)].assetImages != null){
			tableTag = tableTag +
			"<td align='center' width='136' height='136' valign='bottom'><div id='preset"+(i*2)+"'><div  class='"+styleClass+"'><a href='javascript:loadAsset("+(i*2)+")'><img src='"+result.list[(i*2)].assetImages.list[2].imgSrc+"' width='128' height='128' border='0' onmouseover='doBorder("+(i*2)+")' onmouseout='hideBorder("+(i*2)+")'></a></div></div></td>";
		}
		if (((i*2)+1) < numberOfItems && result.list[((i*2)+1)].assetImages != null){
			if(undefined != selectedPresetAssetId && selectedPresetAssetId ==  result.list[((i*2)+1)].assetId)
			{
				styleClass = "presetSliderSelected";
				currSelectedPresetNum = ((i*2)+1);				
			}
			else
			{
				styleClass = "presetSlider";		
			}		
			tableTag = tableTag + 
						"<td align='center' width='136' height='136'valign='bottom'><div id='preset"+((i*2)+1)+"'><div class='"+styleClass+"'><a href='javascript:loadAsset("+((i*2)+1)+")'><img src='"+result.list[((i*2)+1)].assetImages.list[2].imgSrc+"' width='128' height='128' border='0' onmouseover='doBorder("+((i*2)+1)+")' onmouseout='hideBorder("+((i*2)+1)+")'></a></div></div></td>";
		} else {
			tableTag = tableTag + "<td align='center' width='136' height='136'>&nbsp;</td>";
		}
		tableTag = tableTag + "</tr>";
	}
	tableTag = tableTag + "</table>";
	document.getElementById("presets_table").innerHTML = tableTag;
    pager.init();
    pager.showPageNav('pager', 'pageNavPosition');
    if (numberOfItems <= 8){ 
    	document.getElementById("pageNavPosition").style.visibility="hidden";
    } 
    pager.showPage(1);
    isTableBuilt = true;
    theResult = result;
}

var IE6;
if (window.XMLHttpRequest) {
  IE6 = false;
} else {
  IE6 = true;
}

function doBorder(num){
	if (IE6) document.getElementById("preset"+num).style.border = "3px solid #77B957";
}

function hideBorder(num){
	if (IE6) document.getElementById("preset"+num).style.border = "3px solid #fff";
}

function initAJAX() {	
	jsonrpcClient = new WebRpcClient();
}



function doChangeSort(presetRefKey,refPackageId){
	var sort_option;
	if (document.changeSort.changeSort.selectedIndex == 0){
		sort_option = "created_at";
	}
	else if (document.changeSort.changeSort.selectedIndex == 1){
		sort_option = "rating_count";
	}
	else if (document.changeSort.changeSort.selectedIndex == 2){
		sort_option = "download_count";
	}
	jsonrpcClient.PresetList.fetchMatchingObjectPresetsForPreset(presetListingCallback,presetRefKey,refPackageId,sort_option);
}

function callbackBookmarkPresent(result)
{
	if (result)
	{	if(document.getElementById("addBookmark")!==null && document.getElementById("removeBookmark")!=null )
		{
		document.getElementById("addBookmark").style.display = "none";
		document.getElementById("removeBookmark").style.display = "block";	
		}
	}
	else
	{
		if(document.getElementById("addBookmark")!==null && document.getElementById("removeBookmark")!=null )
		{
		document.getElementById("addBookmark").style.display = "block";
		document.getElementById("removeBookmark").style.display = "none";	
		}		
	}
}

function updatePresetDownloadCount(num)
 {        
    if(jsonrpcClient == null)
    {
        jsonrpcClient = new WebRpcClient()
    }
    var result = jsonrpcClient.AjaxAssetItem.incrementAssetDownloadCount(theResult.list[num].assetId);
    if(result != -1)
    {
    	theResult.list[num].downloadCount =  result;
	    var downloadCountDiv = document.getElementById("downloadCount");
        if(downloadCountDiv != null)
        {
          downloadCountDiv.innerHTML = "";
          downloadCountDiv.innerHTML = result;
          Effect.BlindDown(downloadCountDiv);            
        }
	    var assetDownloadCountDiv = document.getElementById("assetDownloadCount");
	    if(assetDownloadCountDiv != null)
		{
		    assetDownloadCountDiv.innerHTML = "";
	        assetDownloadCountDiv.innerHTML = result;
		    Effect.BlindDown(assetDownloadCountDiv);
		}    
    }
 }
 
// cannot call rateAsset in asset_details.js as need to update the theResult object having details of all presets on this page.  
function ratePresetAsset(assetId,num)
{
    if(! isUserLoggedIn)
    {
        loginAndAction('rating');
        return;
    }
    if(! isGameRegistered)
    {
        notificationProductAndAction('rating');
        return;
    }
	//var evarString = 'loggedIn='+s_loggedIn+',persona='+s_persona+',assetID='+s_assetID
    	//+',featuredItem='+s_featuredItem+',officialItem='+s_officialItem+',creatorPersona='+s_creatorPersona
    	//+',category='+s_category+',type='+s_type;
    //setOmniValues(location.href,'recommendItem',location.href,'','','recommendItem',0,'',evarString,'');
    var result = jsonrpcClient.AjaxAssetItem.rateAsset(assetId);
    if(result == -1)
    {
        alert(ratedMsg);
    }
    else
    {
		theResult.list[num].ratingCount = result;
		theResult.list[num].ratedByLoggedInUser = new Boolean(true);
	    totalRatingCount = result;
        hideObject('rate');
        hideObject('rateImage');
	    var rate = document.getElementById('rate');
	    var rateImage = document.getElementById('rateImage');
        var newImageDiv = "";
		newImageDiv += "<img  align='absmiddle'";
        newImageDiv += " src='" + sims3CDNUrlPrefix + "images/recomended.gif' />";
        document.getElementById('rate').innerHTML = result;
        rateImage.innerHTML = newImageDiv;                
	    Effect.BlindDown(rate);
	    Effect.BlindDown(rateImage);
    }
}
 
function loadAsset(num){

	var styleClass = "presetSlider";
	if(undefined != currSelectedPresetNum)
	{
		var selectedPresetDiv = "<div class='presetSliderSelected'><a href='javascript:loadAsset("+(num)+")'><img src='"+theResult.list[(num)].assetImages.list[2].imgSrc+"' width='128' height='128' border='0' onmouseover='doBorder("+(num)+")' onmouseout='hideBorder("+(num)+")'></a></div>";
		document.getElementById("preset"+num).innerHTML = selectedPresetDiv;
		
		var unSelectedPresetDiv = "<div class='presetSlider'><a href='javascript:loadAsset("+(currSelectedPresetNum)+")'><img src='"+theResult.list[(currSelectedPresetNum)].assetImages.list[2].imgSrc+"' width='128' height='128' border='0' onmouseover='doBorder("+(currSelectedPresetNum)+")' onmouseout='hideBorder("+(currSelectedPresetNum)+")'></a></div>";
		document.getElementById("preset"+currSelectedPresetNum).innerHTML = unSelectedPresetDiv;
		
		currSelectedPresetNum = num  ;
		
	}
	selectedPresetAssetId  = theResult.list[num].assetId;
	var mediumImgUrl = "\""+theResult.list[num].assetImages.list[1].imgSrc+"\"";
	var bigImgUrl = "\""+theResult.list[num].assetImages.list[0].imgSrc+"\"";
	var presetName = "\""+theResult.list[num].name+"\"";
	var imgTag = "<a href='javascript:openWorldAsset("+bigImgUrl+" ,\"image\","+presetName+");'><img src="+mediumImgUrl+" width=225 height=225' border='1' style='border-color: rgb(204, 204, 204);'/><div class='zoom_img'></div></a>";
	//var enlargeImageLink = "<a href='javascript:openWorldAsset("+bigImgUrl+" ,\"image\","+presetName+");'><img src="+magImageUrl+" align='absmiddle' border='0'/>&nbsp;&nbsp;&nbsp;"+clickToEnlargeLabel+"</a>";
	document.getElementById("largeImg").innerHTML = imgTag;
	//document.getElementById("enlargeImageLink").innerHTML = enlargeImageLink;
	document.getElementById("assetName").innerHTML = theResult.list[num].name;
	var createdBy = "<a href=\"mypage/"+theResult.list[num].createdByPersona+"\" class='green'>"+theResult.list[num].createdByPersona+"</a>";
	document.getElementById("createdBy").innerHTML = createdBy;
	document.getElementById("createDate").innerHTML = theResult.list[num].createdAt;
	
	document.getElementById("downloadCount").innerHTML = theResult.list[num].downloadCount;
	if (document.getElementById("dlink1") != null){
		var link1 = '<div id="addToGameMainDivId">'+
			'<a id="downloadImgId" class="dsp_bl" href="javascript:loginAndDownload(\'download\',\''+theResult.list[num].assetId+'\');">'+
			'<img src="/images/download_new.gif" border="0" />'+
			'</a>'+
		    '</div>'+
			'<div id="addToGameDivId">'+
			'<a  class="green" id="addToGameLinkId" href="javascript:loginAndDownload(\'download\',\''+theResult.list[num].assetId+'\');" >'+
			addToGameLabel+
			'</a>'+
			'</div>';
		document.getElementById("dlink1").innerHTML = link1;
	}
	if (document.getElementById("dlink2") != null){
		var link2 = '<div id="addToGameMainDivId">'+
				'<a id="downloadImgId" class="dsp_bl" href=\"sims3://download?assetId='+theResult.list[num].assetId+'\" onclick="javascript:updatePresetDownloadCount(\''+num+'\');" >'+
	            '<img src="/images/download_new.gif" border="0" />'+
				'</a>'+
				'</div>'+						
				'<div id="addToGameDivId">'+
				'<a id="addToGameLinkId" class="green" href=\"sims3://download?assetId='+theResult.list[num].assetId+'\" onclick="javascript:updatePresetDownloadCount(\''+num+'\');" >'+
				addToGameLabel+
				'</a>'+	
				'</div>';
		document.getElementById("dlink2").innerHTML = link2;
	}
	if (document.getElementById("dlink3") != null){
		var link3 = '<div id="addToGameMainDivId">'+
				'<a id="downloadImgId" class="dsp_bl" href="javascript:downloadAsset('+theResult.list[num].assetId+')">'+
				'<img src="/images/download_new.gif" border="0"   />'+ 
				'</a>'+
				'</div>'+
				'<div id="addToGameDivId">'+
				'<a id="addToGameLinkId" class="green" href="javascript:downloadAsset('+theResult.list[num].assetId+')" >'+
				addToGameLabel+
				'</a>'+
				'</div>';
		document.getElementById("dlink3").innerHTML = link3;
	}
	document.getElementById("packageSize").innerHTML = "("+theResult.list[num].packageSize+")";
	if (document.getElementById("download1") != null){
		var downloadLink1 = '<a  id="saveToFileLinkId" class="green small" href=\''+theResult.list[num].assetLocation+'\' onclick="javascript:updatePresetDownloadCount(\''+num+'\');" >'+
				        saveLabel+'</a>';
		document.getElementById("download1").innerHTML = downloadLink1;
	}
	if (document.getElementById("download2") != null){
		var downloadLink2 = '<a  id="saveToFileLinkId" class="green small" href="javascript:downloadAsset('+theResult.list[num].assetId+')" >'+
					    saveLabel+'</a>';
		document.getElementById("download2").innerHTML = downloadLink2;
	}
	if (document.getElementById("bookmark1") != null){
		var bookmark1 = '<a href="javascript:addBookmark('+theResult.list[num].assetId+',\''+theResult.list[num].assetType+'\') " class="green">'+bookmarkLabel+'</a>';
		document.getElementById("bookmark1").innerHTML = bookmark1;
	}
	if (document.getElementById("bookmark2") != null){
		var bookmark2 = '<a href="javascript:removeFav('+theResult.list[num].assetId+',\''+theResult.list[num].assetType+'\')" class="green">'+removeBookmark+' </a>';
		document.getElementById("bookmark2").innerHTML = bookmark2;
	}	
	var reportItem = '<a href="javascript:reportItem(\''+theResult.list[num].assetId+'\',\'ASSET\');" class="green"><b>'+reportLabel+'</b></a>';
	document.getElementById("reportItem").innerHTML = reportItem;

	var iRatingCount = theResult.list[num].ratingCount;
	var ratedItemImageDiv = "<img  align='absmiddle' src='" + sims3CDNUrlPrefix + "images/recomended.gif' />";  
	var unratedItemImageDiv = "<img align='absmiddle' src='images/img_recommend.gif' />";
	
	if(theResult.list[num].ratedByLoggedInUser)
	{
		document.getElementById('rateImage').innerHTML = ratedItemImageDiv;
		document.getElementById("rate").innerHTML = '<span style="padding-left:2px;"> '+iRatingCount+'</span>';
	}
	else
	{
		document.getElementById('rateImage').innerHTML = unratedItemImageDiv;
		document.getElementById("rate").innerHTML = '<span ><a href="javascript:ratePresetAsset(\''+theResult.list[num].assetId+'\',\''+num+'\');" class="green">'+rateLabel+'</a></span><span style="padding-left:2px;"> ('+iRatingCount+')</span>';
	}
	
	
	
	var share = '&nbsp;<b><a href="javascript:openShareAsset(\''+theResult.list[num].assetId+'\',\''+theResult.list[num].name+'\',\''+theResult.list[num].createdByPersona+'\',\'preset\');" class="green">'+shareLabel+'</a></b>';
	document.getElementById("shareLink").innerHTML = share;
	if (document.getElementById("buySubCategory") != null){
		document.getElementById("buySubCategory").innerHTML = theResult.list[num].objectType;
	}
	var assetCountry = theResult.list[num].country;
	if (assetCountry == null) assetCountry = "";
	var assetLang = theResult.list[num].language;
	if (assetLang == null) assetLang = "";
	
	var flagCode = assetCountry;
	
	if (flagCode != "AT" && flagCode != "AU" && flagCode != "BE" && flagCode != "BR" && flagCode != "CA" &&
		flagCode != "CH" && flagCode != "CN" && flagCode != "CZ" && flagCode != "DE" && flagCode != "DK" &&
		flagCode != "ES" && flagCode != "FI" && flagCode != "FR" && flagCode != "GB" && flagCode != "GR" &&
		flagCode != "HU" && flagCode != "IE" && flagCode != "IT" && flagCode != "JP" && flagCode != "KR" &&
		flagCode != "MX" && flagCode != "NL" && flagCode != "NO" && flagCode != "NZ" && flagCode != "PL" &&
		flagCode != "PT" && flagCode != "RU" && flagCode != "SE" && flagCode != "TH" && flagCode != "TW" &&
		flagCode != "US" && flagCode != "ZE") {
			flagCode = "OT";
	}
	
	document.getElementById("countryLang").innerHTML = "<img src='"+sims3CDNUrlPrefix+"images/flags/"+flagCode+".gif'> " + assetLang;
	if( document.getElementById("assetDescription") != null )
	{
		document.getElementById("assetDescription").innerHTML = theResult.list[num].description;
		}
	
	if (document.getElementById("itemGender") != null){
		document.getElementById("itemGender").innerHTML = theResult.list[num].gender;
	}
	if (document.getElementById("itemAge") != null){
		document.getElementById("itemAge").innerHTML = theResult.list[num].age;
	}
	if (document.getElementById("itemCategory") != null){
		document.getElementById("itemCategory").innerHTML = theResult.list[num].clothingCategory;
	}
	if (document.getElementById("clothingType") != null){
		document.getElementById("clothingType").innerHTML = theResult.list[num].clothingType;
	}
	if (document.getElementById("accessoryType") != null){
		document.getElementById("accessoryType").innerHTML = theResult.list[num].accessoryType;
	}
	if (document.getElementById("materialCategory") != null){
		document.getElementById("materialCategory").innerHTML = theResult.list[num].materialCategory;
	}
	
	jsonrpcClient.Bookmark.isBookmarked(callbackBookmarkPresent,theResult.list[num].assetId,theResult.list[num].assetId.assetType);
}

var action;  
function notificationProductAndAction(theAction)
{
    action = theAction;
    popup('notifictaionProductLayer');
    frames['productNotificationFrame'].location.href = "/popup/productNotification.html";
}

function closePopup(layer)
{
    document.forms[0].reset();
    parent.popup(layer);
}


function productCodeNotificationAction(theAction)
{
    action = theAction;    
    popup('productCodeNotificationLayerLauncher');
}
/*  Prototype JavaScript framework, version 1.5.0_rc0
 *  (c) 2005 Sam Stephenson <sam@conio.net>
 *
 *  Prototype is freely distributable under the terms of an MIT-style license.
 *  For details, see the Prototype web site: http://prototype.conio.net/
 *
/*--------------------------------------------------------------------------*/

var Prototype = {
  Version: '1.5.0_rc0',
  ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',

  emptyFunction: function() {},
  K: function(x) {return x}
}

var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
}

var Abstract = new Object();

Object.extend = function(destination, source) {
  for (var property in source) {
    destination[property] = source[property];
  }
  return destination;
}

Object.inspect = function(object) {
  try {
    if (object == undefined) return 'undefined';
    if (object == null) return 'null';
    return object.inspect ? object.inspect() : object.toString();
  } catch (e) {
    if (e instanceof RangeError) return '...';
    throw e;
  }
}

Function.prototype.bind = function() {
  var __method = this, args = $A(arguments), object = args.shift();
  return function() {
    return __method.apply(object, args.concat($A(arguments)));
  }
}

Function.prototype.bindAsEventListener = function(object) {
  var __method = this;
  return function(event) {
    return __method.call(object, event || window.event);
  }
}

Object.extend(Number.prototype, {
  toColorPart: function() {
    var digits = this.toString(16);
    if (this < 16) return '0' + digits;
    return digits;
  },

  succ: function() {
    return this + 1;
  },

  times: function(iterator) {
    $R(0, this, true).each(iterator);
    return this;
  }
});

var Try = {
  these: function() {
    var returnValue;

    for (var i = 0; i < arguments.length; i++) {
      var lambda = arguments[i];
      try {
        returnValue = lambda();
        break;
      } catch (e) {}
    }

    return returnValue;
  }
}

/*--------------------------------------------------------------------------*/

var PeriodicalExecuter = Class.create();
PeriodicalExecuter.prototype = {
  initialize: function(callback, frequency) {
    this.callback = callback;
    this.frequency = frequency;
    this.currentlyExecuting = false;

    this.registerCallback();
  },

  registerCallback: function() {
    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
  },

  onTimerEvent: function() {
    if (!this.currentlyExecuting) {
      try {
        this.currentlyExecuting = true;
        this.callback();
      } finally {
        this.currentlyExecuting = false;
      }
    }
  }
}
Object.extend(String.prototype, {
  gsub: function(pattern, replacement) {
    var result = '', source = this, match;
    replacement = arguments.callee.prepareReplacement(replacement);

    while (source.length > 0) {
      if (match = source.match(pattern)) {
        result += source.slice(0, match.index);
        result += (replacement(match) || '').toString();
        source  = source.slice(match.index + match[0].length);
      } else {
        result += source, source = '';
      }
    }
    return result;
  },

  sub: function(pattern, replacement, count) {
    replacement = this.gsub.prepareReplacement(replacement);
    count = count === undefined ? 1 : count;

    return this.gsub(pattern, function(match) {
      if (--count < 0) return match[0];
      return replacement(match);
    });
  },

  scan: function(pattern, iterator) {
    this.gsub(pattern, iterator);
    return this;
  },

  truncate: function(length, truncation) {
    length = length || 30;
    truncation = truncation === undefined ? '...' : truncation;
    return this.length > length ?
      this.slice(0, length - truncation.length) + truncation : this;
  },

  strip: function() {
    return this.replace(/^\s+/, '').replace(/\s+$/, '');
  },

  stripTags: function() {
    return this.replace(/<\/?[^>]+>/gi, '');
  },

  stripScripts: function() {
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
  },

  extractScripts: function() {
    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
    return (this.match(matchAll) || []).map(function(scriptTag) {
      return (scriptTag.match(matchOne) || ['', ''])[1];
    });
  },

  evalScripts: function() {
    return this.extractScripts().map(function(script) { return eval(script) });
  },

  escapeHTML: function() {
    var div = document.createElement('div');
    var text = document.createTextNode(this);
    div.appendChild(text);
    return div.innerHTML;
  },

  unescapeHTML: function() {
    var div = document.createElement('div');
    div.innerHTML = this.stripTags();
    return div.childNodes[0] ? div.childNodes[0].nodeValue : '';
  },

  toQueryParams: function() {
    var pairs = this.match(/^\??(.*)$/)[1].split('&');
    return pairs.inject({}, function(params, pairString) {
      var pair = pairString.split('=');
      params[pair[0]] = pair[1];
      return params;
    });
  },

  toArray: function() {
    return this.split('');
  },

  camelize: function() {
    var oStringList = this.split('-');
    if (oStringList.length == 1) return oStringList[0];

    var camelizedString = this.indexOf('-') == 0
      ? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1)
      : oStringList[0];

    for (var i = 1, len = oStringList.length; i < len; i++) {
      var s = oStringList[i];
      camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
    }

    return camelizedString;
  },

  inspect: function() {
    return "'" + this.replace(/\\/g, '\\\\').replace(/'/g, '\\\'') + "'";
  }
});

String.prototype.gsub.prepareReplacement = function(replacement) {
  if (typeof replacement == 'function') return replacement;
  var template = new Template(replacement);
  return function(match) { return template.evaluate(match) };
}

String.prototype.parseQuery = String.prototype.toQueryParams;

var Template = Class.create();
Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
Template.prototype = {
  initialize: function(template, pattern) {
    this.template = template.toString();
    this.pattern  = pattern || Template.Pattern;
  },

  evaluate: function(object) {
    return this.template.gsub(this.pattern, function(match) {
      var before = match[1];
      if (before == '\\') return match[2];
      return before + (object[match[3]] || '').toString();
    });
  }
}

var $break    = new Object();
var $continue = new Object();

var Enumerable = {
  each: function(iterator) {
    var index = 0;
    try {
      this._each(function(value) {
        try {
          iterator(value, index++);
        } catch (e) {
          if (e != $continue) throw e;
        }
      });
    } catch (e) {
      if (e != $break) throw e;
    }
  },

  all: function(iterator) {
    var result = true;
    this.each(function(value, index) {
      result = result && !!(iterator || Prototype.K)(value, index);
      if (!result) throw $break;
    });
    return result;
  },

  any: function(iterator) {
    var result = true;
    this.each(function(value, index) {
      if (result = !!(iterator || Prototype.K)(value, index))
        throw $break;
    });
    return result;
  },

  collect: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      results.push(iterator(value, index));
    });
    return results;
  },

  detect: function (iterator) {
    var result;
    this.each(function(value, index) {
      if (iterator(value, index)) {
        result = value;
        throw $break;
      }
    });
    return result;
  },

  findAll: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      if (iterator(value, index))
        results.push(value);
    });
    return results;
  },

  grep: function(pattern, iterator) {
    var results = [];
    this.each(function(value, index) {
      var stringValue = value.toString();
      if (stringValue.match(pattern))
        results.push((iterator || Prototype.K)(value, index));
    })
    return results;
  },

  include: function(object) {
    var found = false;
    this.each(function(value) {
      if (value == object) {
        found = true;
        throw $break;
      }
    });
    return found;
  },

  inject: function(memo, iterator) {
    this.each(function(value, index) {
      memo = iterator(memo, value, index);
    });
    return memo;
  },

  invoke: function(method) {
    var args = $A(arguments).slice(1);
    return this.collect(function(value) {
      return value[method].apply(value, args);
    });
  },

  max: function(iterator) {
    var result;
    this.each(function(value, index) {
      value = (iterator || Prototype.K)(value, index);
      if (result == undefined || value >= result)
        result = value;
    });
    return result;
  },

  min: function(iterator) {
    var result;
    this.each(function(value, index) {
      value = (iterator || Prototype.K)(value, index);
      if (result == undefined || value < result)
        result = value;
    });
    return result;
  },

  partition: function(iterator) {
    var trues = [], falses = [];
    this.each(function(value, index) {
      ((iterator || Prototype.K)(value, index) ?
        trues : falses).push(value);
    });
    return [trues, falses];
  },

  pluck: function(property) {
    var results = [];
    this.each(function(value, index) {
      results.push(value[property]);
    });
    return results;
  },

  reject: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      if (!iterator(value, index))
        results.push(value);
    });
    return results;
  },

  sortBy: function(iterator) {
    return this.collect(function(value, index) {
      return {value: value, criteria: iterator(value, index)};
    }).sort(function(left, right) {
      var a = left.criteria, b = right.criteria;
      return a < b ? -1 : a > b ? 1 : 0;
    }).pluck('value');
  },

  toArray: function() {
    return this.collect(Prototype.K);
  },

  zip: function() {
    var iterator = Prototype.K, args = $A(arguments);
    if (typeof args.last() == 'function')
      iterator = args.pop();

    var collections = [this].concat(args).map($A);
    return this.map(function(value, index) {
      return iterator(collections.pluck(index));
    });
  },

  inspect: function() {
    return '#<Enumerable:' + this.toArray().inspect() + '>';
  }
}

Object.extend(Enumerable, {
  map:     Enumerable.collect,
  find:    Enumerable.detect,
  select:  Enumerable.findAll,
  member:  Enumerable.include,
  entries: Enumerable.toArray
});
var $A = Array.from = function(iterable) {
  if (!iterable) return [];
  if (iterable.toArray) {
    return iterable.toArray();
  } else {
    var results = [];
    for (var i = 0; i < iterable.length; i++)
      results.push(iterable[i]);
    return results;
  }
}

Object.extend(Array.prototype, Enumerable);

if (!Array.prototype._reverse)
  Array.prototype._reverse = Array.prototype.reverse;

Object.extend(Array.prototype, {
  _each: function(iterator) {
    for (var i = 0; i < this.length; i++)
      iterator(this[i]);
  },

  clear: function() {
    this.length = 0;
    return this;
  },

  first: function() {
    return this[0];
  },

  last: function() {
    return this[this.length - 1];
  },

  compact: function() {
    return this.select(function(value) {
      return value != undefined || value != null;
    });
  },

  flatten: function() {
    return this.inject([], function(array, value) {
      return array.concat(value && value.constructor == Array ?
        value.flatten() : [value]);
    });
  },

  without: function() {
    var values = $A(arguments);
    return this.select(function(value) {
      return !values.include(value);
    });
  },

  indexOf: function(object) {
    for (var i = 0; i < this.length; i++)
      if (this[i] == object) return i;
    return -1;
  },

  reverse: function(inline) {
    return (inline !== false ? this : this.toArray())._reverse();
  },

  inspect: function() {
    return '[' + this.map(Object.inspect).join(', ') + ']';
  }
});
var Hash = {
  _each: function(iterator) {
    for (var key in this) {
      var value = this[key];
      if (typeof value == 'function') continue;

      var pair = [key, value];
      pair.key = key;
      pair.value = value;
      iterator(pair);
    }
  },

  keys: function() {
    return this.pluck('key');
  },

  values: function() {
    return this.pluck('value');
  },

  merge: function(hash) {
    return $H(hash).inject($H(this), function(mergedHash, pair) {
      mergedHash[pair.key] = pair.value;
      return mergedHash;
    });
  },

  toQueryString: function() {
    return this.map(function(pair) {
      return pair.map(encodeURIComponent).join('=');
    }).join('&');
  },

  inspect: function() {
    return '#<Hash:{' + this.map(function(pair) {
      return pair.map(Object.inspect).join(': ');
    }).join(', ') + '}>';
  }
}

function $H(object) {
  var hash = Object.extend({}, object || {});
  Object.extend(hash, Enumerable);
  Object.extend(hash, Hash);
  return hash;
}
ObjectRange = Class.create();
Object.extend(ObjectRange.prototype, Enumerable);
Object.extend(ObjectRange.prototype, {
  initialize: function(start, end, exclusive) {
    this.start = start;
    this.end = end;
    this.exclusive = exclusive;
  },

  _each: function(iterator) {
    var value = this.start;
    do {
      iterator(value);
      value = value.succ();
    } while (this.include(value));
  },

  include: function(value) {
    if (value < this.start)
      return false;
    if (this.exclusive)
      return value < this.end;
    return value <= this.end;
  }
});

var $R = function(start, end, exclusive) {
  return new ObjectRange(start, end, exclusive);
}

var Ajax = {
  getTransport: function() {
    return Try.these(
      function() {return new XMLHttpRequest()},
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
    ) || false;
  },

  activeRequestCount: 0
}

Ajax.Responders = {
  responders: [],

  _each: function(iterator) {
    this.responders._each(iterator);
  },

  register: function(responderToAdd) {
    if (!this.include(responderToAdd))
      this.responders.push(responderToAdd);
  },

  unregister: function(responderToRemove) {
    this.responders = this.responders.without(responderToRemove);
  },

  dispatch: function(callback, request, transport, json) {
    this.each(function(responder) {
      if (responder[callback] && typeof responder[callback] == 'function') {
        try {
          responder[callback].apply(responder, [request, transport, json]);
        } catch (e) {}
      }
    });
  }
};

Object.extend(Ajax.Responders, Enumerable);

Ajax.Responders.register({
  onCreate: function() {
    Ajax.activeRequestCount++;
  },

  onComplete: function() {
    Ajax.activeRequestCount--;
  }
});

Ajax.Base = function() {};
Ajax.Base.prototype = {
  setOptions: function(options) {
    this.options = {
      method:       'post',
      asynchronous: true,
      contentType:  'application/x-www-form-urlencoded',
      parameters:   ''
    }
    Object.extend(this.options, options || {});
  },

  responseIsSuccess: function() {
    return this.transport.status == undefined
        || this.transport.status == 0
        || (this.transport.status >= 200 && this.transport.status < 300);
  },

  responseIsFailure: function() {
    return !this.responseIsSuccess();
  }
}

Ajax.Request = Class.create();
Ajax.Request.Events =
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];

Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
  initialize: function(url, options) {
    this.transport = Ajax.getTransport();
    this.setOptions(options);
    this.request(url);
  },

  request: function(url) {
    var parameters = this.options.parameters || '';
    if (parameters.length > 0) parameters += '&_=';

    try {
      this.url = url;
      if (this.options.method == 'get' && parameters.length > 0)
        this.url += (this.url.match(/\?/) ? '&' : '?') + parameters;

      Ajax.Responders.dispatch('onCreate', this, this.transport);

      this.transport.open(this.options.method, this.url,
        this.options.asynchronous);

      if (this.options.asynchronous) {
        this.transport.onreadystatechange = this.onStateChange.bind(this);
        setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);
      }

      this.setRequestHeaders();

      var body = this.options.postBody ? this.options.postBody : parameters;
      this.transport.send(this.options.method == 'post' ? body : null);

    } catch (e) {
      this.dispatchException(e);
    }
  },

  setRequestHeaders: function() {
    var requestHeaders =
      ['X-Requested-With', 'XMLHttpRequest',
       'X-Prototype-Version', Prototype.Version,
       'Accept', 'text/javascript, text/html, application/xml, text/xml, */*'];

    if (this.options.method == 'post') {
      requestHeaders.push('Content-type', this.options.contentType);

      /* Force "Connection: close" for Mozilla browsers to work around
       * a bug where XMLHttpReqeuest sends an incorrect Content-length
       * header. See Mozilla Bugzilla #246651.
       */
      if (this.transport.overrideMimeType)
        requestHeaders.push('Connection', 'close');
    }

    if (this.options.requestHeaders)
      requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);

    for (var i = 0; i < requestHeaders.length; i += 2)
      this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);
  },

  onStateChange: function() {
    var readyState = this.transport.readyState;
    if (readyState != 1)
      this.respondToReadyState(this.transport.readyState);
  },

  header: function(name) {
    try {
      return this.transport.getResponseHeader(name);
    } catch (e) {}
  },

  evalJSON: function() {
    try {
      return eval('(' + this.header('X-JSON') + ')');
    } catch (e) {}
  },

  evalResponse: function() {
    try {
      return eval(this.transport.responseText);
    } catch (e) {
      this.dispatchException(e);
    }
  },

  respondToReadyState: function(readyState) {
    var event = Ajax.Request.Events[readyState];
    var transport = this.transport, json = this.evalJSON();

    if (event == 'Complete') {
      try {
        (this.options['on' + this.transport.status]
         || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')]
         || Prototype.emptyFunction)(transport, json);
      } catch (e) {
        this.dispatchException(e);
      }

      if ((this.header('Content-type') || '').match(/^text\/javascript/i))
        this.evalResponse();
    }

    try {
      (this.options['on' + event] || Prototype.emptyFunction)(transport, json);
      Ajax.Responders.dispatch('on' + event, this, transport, json);
    } catch (e) {
      this.dispatchException(e);
    }

    /* Avoid memory leak in MSIE: clean up the oncomplete event handler */
    if (event == 'Complete')
      this.transport.onreadystatechange = Prototype.emptyFunction;
  },

  dispatchException: function(exception) {
    (this.options.onException || Prototype.emptyFunction)(this, exception);
    Ajax.Responders.dispatch('onException', this, exception);
  }
});

Ajax.Updater = Class.create();

Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
  initialize: function(container, url, options) {
    this.containers = {
      success: container.success ? $(container.success) : $(container),
      failure: container.failure ? $(container.failure) :
        (container.success ? null : $(container))
    }

    this.transport = Ajax.getTransport();
    this.setOptions(options);

    var onComplete = this.options.onComplete || Prototype.emptyFunction;
    this.options.onComplete = (function(transport, object) {
      this.updateContent();
      onComplete(transport, object);
    }).bind(this);

    this.request(url);
  },

  updateContent: function() {
    var receiver = this.responseIsSuccess() ?
      this.containers.success : this.containers.failure;
    var response = this.transport.responseText;

    if (!this.options.evalScripts)
      response = response.stripScripts();

    if (receiver) {
      if (this.options.insertion) {
        new this.options.insertion(receiver, response);
      } else {
        Element.update(receiver, response);
      }
    }

    if (this.responseIsSuccess()) {
      if (this.onComplete)
        setTimeout(this.onComplete.bind(this), 10);
    }
  }
});

Ajax.PeriodicalUpdater = Class.create();
Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
  initialize: function(container, url, options) {
    this.setOptions(options);
    this.onComplete = this.options.onComplete;

    this.frequency = (this.options.frequency || 2);
    this.decay = (this.options.decay || 1);

    this.updater = {};
    this.container = container;
    this.url = url;

    this.start();
  },

  start: function() {
    this.options.onComplete = this.updateComplete.bind(this);
    this.onTimerEvent();
  },

  stop: function() {
    this.updater.onComplete = undefined;
    clearTimeout(this.timer);
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
  },

  updateComplete: function(request) {
    if (this.options.decay) {
      this.decay = (request.responseText == this.lastText ?
        this.decay * this.options.decay : 1);

      this.lastText = request.responseText;
    }
    this.timer = setTimeout(this.onTimerEvent.bind(this),
      this.decay * this.frequency * 1000);
  },

  onTimerEvent: function() {
    this.updater = new Ajax.Updater(this.container, this.url, this.options);
  }
});
function $() {
  var results = [], element;
  for (var i = 0; i < arguments.length; i++) {
    element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);
    results.push(Element.extend(element));
  }
  return results.length < 2 ? results[0] : results;
}

document.getElementsByClassName = function(className, parentElement) {
  var children = ($(parentElement) || document.body).getElementsByTagName('*');
  return $A(children).inject([], function(elements, child) {
    if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
      elements.push(Element.extend(child));
    return elements;
  });
}

/*--------------------------------------------------------------------------*/

if (!window.Element)
  var Element = new Object();

Element.extend = function(element) {
  if (!element) return;
  if (_nativeExtensions) return element;

  if (!element._extended && element.tagName && element != window) {
    var methods = Element.Methods, cache = Element.extend.cache;
    for (property in methods) {
      var value = methods[property];
      if (typeof value == 'function')
        element[property] = cache.findOrStore(value);
    }
  }

  element._extended = true;
  return element;
}

Element.extend.cache = {
  findOrStore: function(value) {
    return this[value] = this[value] || function() {
      return value.apply(null, [this].concat($A(arguments)));
    }
  }
}

Element.Methods = {
  visible: function(element) {
    return $(element).style.display != 'none';
  },

  toggle: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = $(arguments[i]);
      Element[Element.visible(element) ? 'hide' : 'show'](element);
    }
  },

  hide: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = $(arguments[i]);
      element.style.display = 'none';
    }
  },

  show: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = $(arguments[i]);
      element.style.display = '';
    }
  },

  remove: function(element) {
    element = $(element);
    element.parentNode.removeChild(element);
  },

  update: function(element, html) {
    $(element).innerHTML = html.stripScripts();
    setTimeout(function() {html.evalScripts()}, 10);
  },

  replace: function(element, html) {
    element = $(element);
    if (element.outerHTML) {
      element.outerHTML = html.stripScripts();
    } else {
      var range = element.ownerDocument.createRange();
      range.selectNodeContents(element);
      element.parentNode.replaceChild(
        range.createContextualFragment(html.stripScripts()), element);
    }
    setTimeout(function() {html.evalScripts()}, 10);
  },

  getHeight: function(element) {
    element = $(element);
    return element.offsetHeight;
  },

  classNames: function(element) {
    return new Element.ClassNames(element);
  },

  hasClassName: function(element, className) {
    if (!(element = $(element))) return;
    return Element.classNames(element).include(className);
  },

  addClassName: function(element, className) {
    if (!(element = $(element))) return;
    return Element.classNames(element).add(className);
  },

  removeClassName: function(element, className) {
    if (!(element = $(element))) return;
    return Element.classNames(element).remove(className);
  },

  // removes whitespace-only text node children
  cleanWhitespace: function(element) {
    element = $(element);
    for (var i = 0; i < element.childNodes.length; i++) {
      var node = element.childNodes[i];
      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
        Element.remove(node);
    }
  },

  empty: function(element) {
    return $(element).innerHTML.match(/^\s*$/);
  },

  childOf: function(element, ancestor) {
    element = $(element), ancestor = $(ancestor);
    while (element = element.parentNode)
      if (element == ancestor) return true;
    return false;
  },

  scrollTo: function(element) {
    element = $(element);
    var x = element.x ? element.x : element.offsetLeft,
        y = element.y ? element.y : element.offsetTop;
    window.scrollTo(x, y);
  },

  getStyle: function(element, style) {
    element = $(element);
    var value = element.style[style.camelize()];
    if (!value) {
      if (document.defaultView && document.defaultView.getComputedStyle) {
        var css = document.defaultView.getComputedStyle(element, null);
        value = css ? css.getPropertyValue(style) : null;
      } else if (element.currentStyle) {
        value = element.currentStyle[style.camelize()];
      }
    }

    if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))
      if (Element.getStyle(element, 'position') == 'static') value = 'auto';

    return value == 'auto' ? null : value;
  },

  setStyle: function(element, style) {
    element = $(element);
    for (var name in style)
      element.style[name.camelize()] = style[name];
  },

  getDimensions: function(element) {
    element = $(element);
    if (Element.getStyle(element, 'display') != 'none')
      return {width: element.offsetWidth, height: element.offsetHeight};

    // All *Width and *Height properties give 0 on elements with display none,
    // so enable the element temporarily
    var els = element.style;
    var originalVisibility = els.visibility;
    var originalPosition = els.position;
    els.visibility = 'hidden';
    els.position = 'absolute';
    els.display = '';
    var originalWidth = element.clientWidth;
    var originalHeight = element.clientHeight;
    els.display = 'none';
    els.position = originalPosition;
    els.visibility = originalVisibility;
    return {width: originalWidth, height: originalHeight};
  },

  makePositioned: function(element) {
    element = $(element);
    var pos = Element.getStyle(element, 'position');
    if (pos == 'static' || !pos) {
      element._madePositioned = true;
      element.style.position = 'relative';
      // Opera returns the offset relative to the positioning context, when an
      // element is position relative but top and left have not been defined
      if (window.opera) {
        element.style.top = 0;
        element.style.left = 0;
      }
    }
  },

  undoPositioned: function(element) {
    element = $(element);
    if (element._madePositioned) {
      element._madePositioned = undefined;
      element.style.position =
        element.style.top =
        element.style.left =
        element.style.bottom =
        element.style.right = '';
    }
  },

  makeClipping: function(element) {
    element = $(element);
    if (element._overflow) return;
    element._overflow = element.style.overflow;
    if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
      element.style.overflow = 'hidden';
  },

  undoClipping: function(element) {
    element = $(element);
    if (element._overflow) return;
    element.style.overflow = element._overflow;
    element._overflow = undefined;
  }
}

Object.extend(Element, Element.Methods);

var _nativeExtensions = false;

if(!HTMLElement && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
  var HTMLElement = {}
  HTMLElement.prototype = document.createElement('div').__proto__;
}

Element.addMethods = function(methods) {
  Object.extend(Element.Methods, methods || {});

  if(typeof HTMLElement != 'undefined') {
    var methods = Element.Methods, cache = Element.extend.cache;
    for (property in methods) {
      var value = methods[property];
      if (typeof value == 'function')
        HTMLElement.prototype[property] = cache.findOrStore(value);
    }
    _nativeExtensions = true;
  }
}

Element.addMethods();

var Toggle = new Object();
Toggle.display = Element.toggle;

/*--------------------------------------------------------------------------*/

Abstract.Insertion = function(adjacency) {
  this.adjacency = adjacency;
}

Abstract.Insertion.prototype = {
  initialize: function(element, content) {
    this.element = $(element);
    this.content = content.stripScripts();

    if (this.adjacency && this.element.insertAdjacentHTML) {
      try {
        this.element.insertAdjacentHTML(this.adjacency, this.content);
      } catch (e) {
        var tagName = this.element.tagName.toLowerCase();
        if (tagName == 'tbody' || tagName == 'tr') {
          this.insertContent(this.contentFromAnonymousTable());
        } else {
          throw e;
        }
      }
    } else {
      this.range = this.element.ownerDocument.createRange();
      if (this.initializeRange) this.initializeRange();
      this.insertContent([this.range.createContextualFragment(this.content)]);
    }

    setTimeout(function() {content.evalScripts()}, 10);
  },

  contentFromAnonymousTable: function() {
    var div = document.createElement('div');
    div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';
    return $A(div.childNodes[0].childNodes[0].childNodes);
  }
}

var Insertion = new Object();

Insertion.Before = Class.create();
Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
  initializeRange: function() {
    this.range.setStartBefore(this.element);
  },

  insertContent: function(fragments) {
    fragments.each((function(fragment) {
      this.element.parentNode.insertBefore(fragment, this.element);
    }).bind(this));
  }
});

Insertion.Top = Class.create();
Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
  initializeRange: function() {
    this.range.selectNodeContents(this.element);
    this.range.collapse(true);
  },

  insertContent: function(fragments) {
    fragments.reverse(false).each((function(fragment) {
      this.element.insertBefore(fragment, this.element.firstChild);
    }).bind(this));
  }
});

Insertion.Bottom = Class.create();
Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
  initializeRange: function() {
    this.range.selectNodeContents(this.element);
    this.range.collapse(this.element);
  },

  insertContent: function(fragments) {
    fragments.each((function(fragment) {
      this.element.appendChild(fragment);
    }).bind(this));
  }
});

Insertion.After = Class.create();
Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
  initializeRange: function() {
    this.range.setStartAfter(this.element);
  },

  insertContent: function(fragments) {
    fragments.each((function(fragment) {
      this.element.parentNode.insertBefore(fragment,
        this.element.nextSibling);
    }).bind(this));
  }
});

/*--------------------------------------------------------------------------*/

Element.ClassNames = Class.create();
Element.ClassNames.prototype = {
  initialize: function(element) {
    this.element = $(element);
  },

  _each: function(iterator) {
    this.element.className.split(/\s+/).select(function(name) {
      return name.length > 0;
    })._each(iterator);
  },

  set: function(className) {
    this.element.className = className;
  },

  add: function(classNameToAdd) {
    if (this.include(classNameToAdd)) return;
    this.set(this.toArray().concat(classNameToAdd).join(' '));
  },

  remove: function(classNameToRemove) {
    if (!this.include(classNameToRemove)) return;
    this.set(this.select(function(className) {
      return className != classNameToRemove;
    }).join(' '));
  },

  toString: function() {
    return this.toArray().join(' ');
  }
}

Object.extend(Element.ClassNames.prototype, Enumerable);
var Selector = Class.create();
Selector.prototype = {
  initialize: function(expression) {
    this.params = {classNames: []};
    this.expression = expression.toString().strip();
    this.parseExpression();
    this.compileMatcher();
  },

  parseExpression: function() {
    function abort(message) { throw 'Parse error in selector: ' + message; }

    if (this.expression == '')  abort('empty expression');

    var params = this.params, expr = this.expression, match, modifier, clause, rest;
    while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) {
      params.attributes = params.attributes || [];
      params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''});
      expr = match[1];
    }

    if (expr == '*') return this.params.wildcard = true;

    while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) {
      modifier = match[1], clause = match[2], rest = match[3];
      switch (modifier) {
        case '#':       params.id = clause; break;
        case '.':       params.classNames.push(clause); break;
        case '':
        case undefined: params.tagName = clause.toUpperCase(); break;
        default:        abort(expr.inspect());
      }
      expr = rest;
    }

    if (expr.length > 0) abort(expr.inspect());
  },

  buildMatchExpression: function() {
    var params = this.params, conditions = [], clause;

    if (params.wildcard)
      conditions.push('true');
    if (clause = params.id)
      conditions.push('element.id == ' + clause.inspect());
    if (clause = params.tagName)
      conditions.push('element.tagName.toUpperCase() == ' + clause.inspect());
    if ((clause = params.classNames).length > 0)
      for (var i = 0; i < clause.length; i++)
        conditions.push('Element.hasClassName(element, ' + clause[i].inspect() + ')');
    if (clause = params.attributes) {
      clause.each(function(attribute) {
        var value = 'element.getAttribute(' + attribute.name.inspect() + ')';
        var splitValueBy = function(delimiter) {
          return value + ' && ' + value + '.split(' + delimiter.inspect() + ')';
        }

        switch (attribute.operator) {
          case '=':       conditions.push(value + ' == ' + attribute.value.inspect()); break;
          case '~=':      conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break;
          case '|=':      conditions.push(
                            splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect()
                          ); break;
          case '!=':      conditions.push(value + ' != ' + attribute.value.inspect()); break;
          case '':
          case undefined: conditions.push(value + ' != null'); break;
          default:        throw 'Unknown operator ' + attribute.operator + ' in selector';
        }
      });
    }

    return conditions.join(' && ');
  },

  compileMatcher: function() {
    this.match = new Function('element', 'if (!element.tagName) return false; \
      return ' + this.buildMatchExpression());
  },

  findElements: function(scope) {
    var element;

    if (element = $(this.params.id))
      if (this.match(element))
        if (!scope || Element.childOf(element, scope))
          return [element];

    scope = (scope || document).getElementsByTagName(this.params.tagName || '*');

    var results = [];
    for (var i = 0; i < scope.length; i++)
      if (this.match(element = scope[i]))
        results.push(Element.extend(element));

    return results;
  },

  toString: function() {
    return this.expression;
  }
}

function $$() {
  return $A(arguments).map(function(expression) {
    return expression.strip().split(/\s+/).inject([null], function(results, expr) {
      var selector = new Selector(expr);
      return results.map(selector.findElements.bind(selector)).flatten();
    });
  }).flatten();
}
var Field = {
  clear: function() {
    for (var i = 0; i < arguments.length; i++)
      $(arguments[i]).value = '';
  },

  focus: function(element) {
    $(element).focus();
  },

  present: function() {
    for (var i = 0; i < arguments.length; i++)
      if ($(arguments[i]).value == '') return false;
    return true;
  },

  select: function(element) {
    $(element).select();
  },

  activate: function(element) {
    element = $(element);
    element.focus();
    if (element.select)
      element.select();
  }
}

/*--------------------------------------------------------------------------*/

var Form = {
  serialize: function(form) {
    var elements = Form.getElements($(form));
    var queryComponents = new Array();

    for (var i = 0; i < elements.length; i++) {
      var queryComponent = Form.Element.serialize(elements[i]);
      if (queryComponent)
        queryComponents.push(queryComponent);
    }

    return queryComponents.join('&');
  },

  getElements: function(form) {
    form = $(form);
    var elements = new Array();

    for (var tagName in Form.Element.Serializers) {
      var tagElements = form.getElementsByTagName(tagName);
      for (var j = 0; j < tagElements.length; j++)
        elements.push(tagElements[j]);
    }
    return elements;
  },

  getInputs: function(form, typeName, name) {
    form = $(form);
    var inputs = form.getElementsByTagName('input');

    if (!typeName && !name)
      return inputs;

    var matchingInputs = new Array();
    for (var i = 0; i < inputs.length; i++) {
      var input = inputs[i];
      if ((typeName && input.type != typeName) ||
          (name && input.name != name))
        continue;
      matchingInputs.push(input);
    }

    return matchingInputs;
  },

  disable: function(form) {
    var elements = Form.getElements(form);
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      element.blur();
      element.disabled = 'true';
    }
  },

  enable: function(form) {
    var elements = Form.getElements(form);
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      element.disabled = '';
    }
  },


  findFirstElement: function(form) {
    return Form.getElements(form).find(function(element) {
      return element.type != 'hidden' && !element.disabled &&
        ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
    });
  },

  focusFirstElement: function(form) {
    Field.activate(Form.findFirstElement(form));
  },

  reset: function(form) {
    $(form).reset();
  }
}

Form.Element = {
  serialize: function(element) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    var parameter = Form.Element.Serializers[method](element);

    if (parameter) {
      var key = encodeURIComponent(parameter[0]);
      if (key.length == 0) return;

      if (parameter[1].constructor != Array)
        parameter[1] = [parameter[1]];

      return parameter[1].map(function(value) {
        return key + '=' + encodeURIComponent(value);
      }).join('&');
    }
  },

  getValue: function(element) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    var parameter = Form.Element.Serializers[method](element);

    if (parameter)
      return parameter[1];
  }
}

Form.Element.Serializers = {
  input: function(element) {
    switch (element.type.toLowerCase()) {
      case 'submit':
      case 'hidden':
      case 'password':
      case 'text':
        return Form.Element.Serializers.textarea(element);
      case 'checkbox':
      case 'radio':
        return Form.Element.Serializers.inputSelector(element);
    }
    return false;
  },

  inputSelector: function(element) {
    if (element.checked)
      return [element.name, element.value];
  },

  textarea: function(element) {
    return [element.name, element.value];
  },

  select: function(element) {
    return Form.Element.Serializers[element.type == 'select-one' ?
      'selectOne' : 'selectMany'](element);
  },

  selectOne: function(element) {
    var value = '', opt, index = element.selectedIndex;
    if (index >= 0) {
      opt = element.options[index];
      value = opt.value || opt.text;
    }
    return [element.name, value];
  },

  selectMany: function(element) {
    var value = [];
    for (var i = 0; i < element.length; i++) {
      var opt = element.options[i];
      if (opt.selected)
        value.push(opt.value || opt.text);
    }
    return [element.name, value];
  }
}

/*--------------------------------------------------------------------------*/

var $F = Form.Element.getValue;

/*--------------------------------------------------------------------------*/

Abstract.TimedObserver = function() {}
Abstract.TimedObserver.prototype = {
  initialize: function(element, frequency, callback) {
    this.frequency = frequency;
    this.element   = $(element);
    this.callback  = callback;

    this.lastValue = this.getValue();
    this.registerCallback();
  },

  registerCallback: function() {
    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
  },

  onTimerEvent: function() {
    var value = this.getValue();
    if (this.lastValue != value) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
  }
}

Form.Element.Observer = Class.create();
Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.Observer = Class.create();
Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
  getValue: function() {
    return Form.serialize(this.element);
  }
});

/*--------------------------------------------------------------------------*/

Abstract.EventObserver = function() {}
Abstract.EventObserver.prototype = {
  initialize: function(element, callback) {
    this.element  = $(element);
    this.callback = callback;

    this.lastValue = this.getValue();
    if (this.element.tagName.toLowerCase() == 'form')
      this.registerFormCallbacks();
    else
      this.registerCallback(this.element);
  },

  onElementEvent: function() {
    var value = this.getValue();
    if (this.lastValue != value) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
  },

  registerFormCallbacks: function() {
    var elements = Form.getElements(this.element);
    for (var i = 0; i < elements.length; i++)
      this.registerCallback(elements[i]);
  },

  registerCallback: function(element) {
    if (element.type) {
      switch (element.type.toLowerCase()) {
        case 'checkbox':
        case 'radio':
          Event.observe(element, 'click', this.onElementEvent.bind(this));
          break;
        case 'password':
        case 'text':
        case 'textarea':
        case 'select-one':
        case 'select-multiple':
          Event.observe(element, 'change', this.onElementEvent.bind(this));
          break;
      }
    }
  }
}

Form.Element.EventObserver = Class.create();
Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.EventObserver = Class.create();
Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
  getValue: function() {
    return Form.serialize(this.element);
  }
});
if (!window.Event) {
  var Event = new Object();
}

Object.extend(Event, {
  KEY_BACKSPACE: 8,
  KEY_TAB:       9,
  KEY_RETURN:   13,
  KEY_ESC:      27,
  KEY_LEFT:     37,
  KEY_UP:       38,
  KEY_RIGHT:    39,
  KEY_DOWN:     40,
  KEY_DELETE:   46,

  element: function(event) {
    return event.target || event.srcElement;
  },

  isLeftClick: function(event) {
    return (((event.which) && (event.which == 1)) ||
            ((event.button) && (event.button == 1)));
  },

  pointerX: function(event) {
    return event.pageX || (event.clientX +
      (document.documentElement.scrollLeft || document.body.scrollLeft));
  },

  pointerY: function(event) {
    return event.pageY || (event.clientY +
      (document.documentElement.scrollTop || document.body.scrollTop));
  },

  stop: function(event) {
    if (event.preventDefault) {
      event.preventDefault();
      event.stopPropagation();
    } else {
      event.returnValue = false;
      event.cancelBubble = true;
    }
  },

  // find the first node with the given tagName, starting from the
  // node the event was triggered on; traverses the DOM upwards
  findElement: function(event, tagName) {
    var element = Event.element(event);
    while (element.parentNode && (!element.tagName ||
        (element.tagName.toUpperCase() != tagName.toUpperCase())))
      element = element.parentNode;
    return element;
  },

  observers: false,

  _observeAndCache: function(element, name, observer, useCapture) {
    if (!this.observers) this.observers = [];
    if (element.addEventListener) {
      this.observers.push([element, name, observer, useCapture]);
      element.addEventListener(name, observer, useCapture);
    } else if (element.attachEvent) {
      this.observers.push([element, name, observer, useCapture]);
      element.attachEvent('on' + name, observer);
    }
  },

  unloadCache: function() {
    if (!Event.observers) return;
    for (var i = 0; i < Event.observers.length; i++) {
      Event.stopObserving.apply(this, Event.observers[i]);
      Event.observers[i][0] = null;
    }
    Event.observers = false;
  },

  observe: function(element, name, observer, useCapture) {
    var element = $(element);
    useCapture = useCapture || false;

    if (name == 'keypress' &&
        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
        || element.attachEvent))
      name = 'keydown';

    this._observeAndCache(element, name, observer, useCapture);
  },

  stopObserving: function(element, name, observer, useCapture) {
    var element = $(element);
    useCapture = useCapture || false;

    if (name == 'keypress' &&
        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
        || element.detachEvent))
      name = 'keydown';

    if (element.removeEventListener) {
      element.removeEventListener(name, observer, useCapture);
    } else if (element.detachEvent) {
      element.detachEvent('on' + name, observer);
    }
  }
});

/* prevent memory leaks in IE */
if (navigator.appVersion.match(/\bMSIE\b/))
  Event.observe(window, 'unload', Event.unloadCache, false);
var Position = {
  // set to true if needed, warning: firefox performance problems
  // NOT neeeded for page scrolling, only if draggable contained in
  // scrollable elements
  includeScrollOffsets: false,

  // must be called before calling withinIncludingScrolloffset, every time the
  // page is scrolled
  prepare: function() {
    this.deltaX =  window.pageXOffset
                || document.documentElement.scrollLeft
                || document.body.scrollLeft
                || 0;
    this.deltaY =  window.pageYOffset
                || document.documentElement.scrollTop
                || document.body.scrollTop
                || 0;
  },

  realOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.scrollTop  || 0;
      valueL += element.scrollLeft || 0;
      element = element.parentNode;
    } while (element);
    return [valueL, valueT];
  },

  cumulativeOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
    } while (element);
    return [valueL, valueT];
  },

  positionedOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
      if (element) {
        p = Element.getStyle(element, 'position');
        if (p == 'relative' || p == 'absolute') break;
      }
    } while (element);
    return [valueL, valueT];
  },

  offsetParent: function(element) {
    if (element.offsetParent) return element.offsetParent;
    if (element == document.body) return element;

    while ((element = element.parentNode) && element != document.body)
      if (Element.getStyle(element, 'position') != 'static')
        return element;

    return document.body;
  },

  // caches x/y coordinate pair to use with overlap
  within: function(element, x, y) {
    if (this.includeScrollOffsets)
      return this.withinIncludingScrolloffsets(element, x, y);
    this.xcomp = x;
    this.ycomp = y;
    this.offset = this.cumulativeOffset(element);

    return (y >= this.offset[1] &&
            y <  this.offset[1] + element.offsetHeight &&
            x >= this.offset[0] &&
            x <  this.offset[0] + element.offsetWidth);
  },

  withinIncludingScrolloffsets: function(element, x, y) {
    var offsetcache = this.realOffset(element);

    this.xcomp = x + offsetcache[0] - this.deltaX;
    this.ycomp = y + offsetcache[1] - this.deltaY;
    this.offset = this.cumulativeOffset(element);

    return (this.ycomp >= this.offset[1] &&
            this.ycomp <  this.offset[1] + element.offsetHeight &&
            this.xcomp >= this.offset[0] &&
            this.xcomp <  this.offset[0] + element.offsetWidth);
  },

  // within must be called directly before
  overlap: function(mode, element) {
    if (!mode) return 0;
    if (mode == 'vertical')
      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
        element.offsetHeight;
    if (mode == 'horizontal')
      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
        element.offsetWidth;
  },

  clone: function(source, target) {
    source = $(source);
    target = $(target);
    target.style.position = 'absolute';
    var offsets = this.cumulativeOffset(source);
    target.style.top    = offsets[1] + 'px';
    target.style.left   = offsets[0] + 'px';
    target.style.width  = source.offsetWidth + 'px';
    target.style.height = source.offsetHeight + 'px';
  },

  page: function(forElement) {
    var valueT = 0, valueL = 0;

    var element = forElement;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;

      // Safari fix
      if (element.offsetParent==document.body)
        if (Element.getStyle(element,'position')=='absolute') break;

    } while (element = element.offsetParent);

    element = forElement;
    do {
      valueT -= element.scrollTop  || 0;
      valueL -= element.scrollLeft || 0;
    } while (element = element.parentNode);

    return [valueL, valueT];
  },

  clone: function(source, target) {
    var options = Object.extend({
      setLeft:    true,
      setTop:     true,
      setWidth:   true,
      setHeight:  true,
      offsetTop:  0,
      offsetLeft: 0
    }, arguments[2] || {})

    // find page position of source
    source = $(source);
    var p = Position.page(source);

    // find coordinate system to use
    target = $(target);
    var delta = [0, 0];
    var parent = null;
    // delta [0,0] will do fine with position: fixed elements,
    // position:absolute needs offsetParent deltas
    if (Element.getStyle(target,'position') == 'absolute') {
      parent = Position.offsetParent(target);
      delta = Position.page(parent);
    }

    // correct by body offsets (fixes Safari)
    if (parent == document.body) {
      delta[0] -= document.body.offsetLeft;
      delta[1] -= document.body.offsetTop;
    }

    // set position
    if(options.setLeft)   target.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
    if(options.setTop)    target.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
    if(options.setWidth)  target.style.width = source.offsetWidth + 'px';
    if(options.setHeight) target.style.height = source.offsetHeight + 'px';
  },

  absolutize: function(element) {
    element = $(element);
    if (element.style.position == 'absolute') return;
    Position.prepare();

    var offsets = Position.positionedOffset(element);
    var top     = offsets[1];
    var left    = offsets[0];
    var width   = element.clientWidth;
    var height  = element.clientHeight;

    element._originalLeft   = left - parseFloat(element.style.left  || 0);
    element._originalTop    = top  - parseFloat(element.style.top || 0);
    element._originalWidth  = element.style.width;
    element._originalHeight = element.style.height;

    element.style.position = 'absolute';
    element.style.top    = top + 'px';;
    element.style.left   = left + 'px';;
    element.style.width  = width + 'px';;
    element.style.height = height + 'px';;
  },

  relativize: function(element) {
    element = $(element);
    if (element.style.position == 'relative') return;
    Position.prepare();

    element.style.position = 'relative';
    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);

    element.style.top    = top + 'px';
    element.style.left   = left + 'px';
    element.style.height = element._originalHeight;
    element.style.width  = element._originalWidth;
  }
}

// Safari returns margins on body which is incorrect if the child is absolutely
// positioned.  For performance reasons, redefine Position.cumulativeOffset for
// KHTML/WebKit only.
if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
  Position.cumulativeOffset = function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      if (element.offsetParent == document.body)
        if (Element.getStyle(element, 'position') == 'absolute') break;

      element = element.offsetParent;
    } while (element);

    return [valueL, valueT];
  }
}

function initWebRegistrationDivs() {

    if (isRegistrationPage == true) {
        if (document.getElementById("countrySelect").value == "US" ||
            document.getElementById("countrySelect").value == "CA") {
            document.getElementById("contactMe").checked = true;
        } else {
            document.getElementById("contactMe").checked = false;
        }
    }
  
  if( isRegistrationPage == true)
  {
   if (window.attachEvent == undefined)
        {
            var tag = document.getElementsByTagName("span");
            for (var i = 0; i < tag.length; i++)
            {           
                if (tag.item(i).className == "wordwrap")
                {
                    var text = tag.item(i).innerHTML;
                    tag.item(i).innerHTML = text.replace(/(.*?)/g , "<wbr />");
                    tag.item(i).innerHTML = text.replace(/(\/br)/g , "<wbr />");
                    
                }
            }
        }
  }  
}

function enableSignupButton() {
    if (document.getElementById("sims3Agreement").checked) {
        document.getElementById("signup").disabled = false;
    } else {
        document.getElementById("signup").disabled = true;
    }
}

function enableContactMeChkbox(object)
{
    if(object.value == 'US' || object.value == 'CA')
    {
     document.getElementById('contactMe').checked=true;
    }
    else
    {
     document.getElementById('contactMe').checked=false;
    }       
}			
var itemId;
var itemType;
var persona;
var totalpages;
function backToDetails(personaName,itemId,itemType){
    if(itemType=='MASHUPS' || itemType=='STORIES')
    {
        window.document.location = '/contentDetail.html?contentId='+ itemId;
    }
    else if(itemType=='ASSET')
    {
         window.document.location = '/assetDetail.html?assetId='+ itemId;
    }
    else if(itemType=='SIM_PAGE' || personaName!='')
    {
         window.document.location = '/mypage/' + personaName;
    }
}

function reportItem(itemId,itemType)
   {
       if(!isUserLoggedIn)
       {
           loginAndAction('reporting');
           return;
       }
       if(! isGameRegistered)
       {
           notificationProductAndAction('reporting');
           return;
       }
       if(isUserSimGuru == 'true')
       {
            report(itemId,itemType);
            return;
       }
      
      checkAndReport(itemId,itemType);
      
   }
   
function reportSimPage(itemId,pagePersona)
   {
       persona = pagePersona;
       if(!isUserLoggedIn)
       {
           loginAndAction('reporting');
           return;
       }
       if(! isGameRegistered)
       {
           notificationProductAndAction('reporting');
           return;
       }
       if(isUserSimGuru == 'true')
       {
            report(itemId,'SIM_PAGE');
            return;
       }
       checkAndReport(itemId,'SIM_PAGE');
   }
   
   
function reportContent(itemId,itemType,noOfPages)
   {
       totalpages = noOfPages;
       if(!isUserLoggedIn)
       {
           loginAndAction('reporting');
           return;
       }
       if(! isGameRegistered)
       {
           notificationProductAndAction('reporting');
           return;
       }
       if(isUserSimGuru == 'true')
       {
            report(itemId,itemType);
            return;
       }
       checkAndReport(itemId,itemType);
   }
   
   
function checkAndReport(id,type)
 {
    itemType = type;
    itemId = id;
    try
     { 
        if(!jsonrpcClient)
	    {
	        initAJAX();
	    }
        jsonrpcClient.SimPage.canUserReportItem(callbackReportPage, itemId, itemType);
    } 
     catch (e)
     {
        alert(" exception caught " + e);    
     }
 }
 
 
function callbackReportPage(result)
{
    var itemReportable = result;
    if(!itemReportable)
    {
          var reportThreshholdDiv = document.getElementById("reportItemThrottleReachedLayer");
	      if(reportThreshholdDiv != null)
	      {
	          popup("reportItemThrottleReachedLayer");
	      }
    }
    else
    {
      report(itemId,itemType);
    }
}

function report(itemId,itemType)
{
    if(itemType == 'SIM_PAGE')
    {
       window.document.location = "/reportItem.html?itemId="+itemId+"&pagepersona="+persona;
    }
    else if(itemType=='MASHUPS' || itemType=='ASSET')
    {
      window.document.location = "/reportItem.html?itemId="+itemId+"&itemType="+itemType;
    }
    else if(itemType=='STORIES')
    {
      window.document.location = "/reportItem.html?itemId="+itemId+"&itemType="+itemType+"&totalPages="+totalpages;
    }
}

var timeoutId;

function grantPrivilegePrompt() {
    
    var isSimGuru = document.getElementById('grantSimGuruRadioId').checked;
    var isModerator = document.getElementById('grantModeratorRadioId').checked
    if (!isSimGuru && !isModerator) {
        return false;   
    }
    if (isSimGuru) {        
        showObject('grantSimGuruPrivilegeLayerConfirm'); 
        showObject('grantSimGuruPrivilegeLayerConfirmButton');
    } else {        
        showObject('grantModeratorPrivilegeLayerConfirm'); 
        showObject('grantModeratorPrivilegeLayerConfirmButton'); 
    }   
    
    hideObject('grantPrivilegeLayer');    

}

function submitForm()
{
   document.HideSimPage.submit();    
}


// time out after 8 seconds
function addFriendPopup()
{	
   	timeoutId = setTimeout('popup(\'friendAdded\');paintFriendPending(\'pendingFriends\',\'notFriends\', \'areFriends\', \'notLoggedIn\')', 8000);
	popup('friendAdded');
}

// cancel timeout
function cancelTimeout()
{	
	clearTimeout( timeoutId );
}	

function showTabFromTwo(whatTab){
if (whatTab == 1)
{
   document.getElementById('tabBody14myprofileblog').style.display = 'block';
   document.getElementById('tabBody24simDeExg').style.display = 'none';
   document.getElementById('detailsTabs14simDeExg').style.color = '#333333';
   document.getElementById('detailsTabs24simDeExg').style.color = '#D9D9D9';
   document.getElementById('detailsTabsmyprofilealignment').style.background = 'url(/images/tab1myblogNew.jpg)';
}
 else if (whatTab == 2)
 {
    document.getElementById('tabBody14myprofileblog').style.display = 'none';
    document.getElementById('tabBody24simDeExg').style.display = 'block';
    document.getElementById('detailsTabs14simDeExg').style.color = '#D9D9D9';
    document.getElementById('detailsTabs24simDeExg').style.color = '#333333';
    document.getElementById('detailsTabsmyprofilealignment').style.background = 'url(/images/tab2aboutmeNew.jpg)';
 }
 }

function openPopupWindow(pic){
  newwin=window.open(pic,'newwin','top=0,left=0,scrollbars=1,width=1010px,height=700px,toolbar=no');
}
function checkUserSimTraits() {
    var count = 0;    
    // Getting the count of checkboxes checked (other than Any)
    for(var i=0; i < document.userTraitsForm.userTraits.length; i++){
        if (document.userTraitsForm.userTraits[i].checked) {            
            count = count + 1;
        }    
    }
    
     
     if (count < maxUserTraits) {
          for (var i=0; i < document.userTraitsForm.userTraits.length; i++) {
            if (document.userTraitsForm.userTraits[i].disabled) {
                document.userTraitsForm.userTraits[i].disabled = false;
            }
        }      
    }
    
    if (count == maxUserTraits) {
        // When 5 items are selected
        for (var i=0; i < document.userTraitsForm.userTraits.length; i++) {
            if (!document.userTraitsForm.userTraits[i].checked) {
                document.userTraitsForm.userTraits[i].disabled = true;
            }
        }
    }    
}

function manageCheckedTraitListOnLoad(traitsCount){
if(traitsCount >= maxUserTraits ){       
    for(var i=0; i < document.userTraitsForm.userTraits.length; i++){
        if (!document.userTraitsForm.userTraits[i].checked) {            
           document.userTraitsForm.userTraits[i].disabled = true;
        }    
    }
   }

}
	