/* for user other than the developer to vote */
function vote(rates, appsVersionId, userId, location){
  if (userId==0){
    alert("Login to vote!");
    return false;
  }
  else{
    var showStatus = function(msgString){
      if (msgString.length>0){
        /*var text = "";
        var result= msgString[0];
        var totalVote = result.totalVotes+" votes";
        if (result.totalVotes==1){
          totalVote = result.totalVotes+" vote";
        }
        document.getElementById("rate_"+appsVersionId).innerHTML = result.average+"/5 by "+totalVote;
        text += "<li class='current-rating' id='current-rating_"+appsVersionId+"' style='width: "+(result.average*10)+"px'></li>";
        document.getElementById("star_"+appsVersionId).innerHTML = text;*/
        if(rates==1)
          document.getElementById("appRate").innerHTML = "<li  class='apppRatingsStars uses-ui-icons'>You rated this app "+rates+" star out of 5</li>";
        else if(rates<4)
          document.getElementById("appRate").innerHTML = "<li  class='apppRatingsStars uses-ui-icons'>You rated this app "+rates+" stars out of 5</li>";
        else
          document.getElementById("appRate").innerHTML = "<li  class='apppRatingsStars uses-ui-icons'>You rated this app "+rates+" stars out of 5</li>";
      }
    }
    AppsRating.voteThisApp(rates,appsVersionId, userId, location, {callback:showStatus,errorHandler:error});
  }
}

/* save item into shopping cart */
function saveCart(appsVerId, userId, platformId, clickTracer){
  /*
	alert("Add to Cart function disabled");
	return false;
   */
  if (userId==0){
    document.getElementById("addCart_"+appsVerId).innerHTML = "<a href='javascript:showLayer(\"loginBox\")'>Login</a> to add cart";
  }else{
    var showStatus = function(msgString){
      if (msgString.length>0){
        var result = msgString[0];
        var showItem = "1 item";
        if (result.totalItems >1){
          showItem = result.totalItems+" items";
        }
        document.getElementById("myCart").innerHTML = showItem;
        if (document.getElementById("addCart_"+appsVerId)==null){
        //document.getElementById("miniCart_"+appsVerId).innerHTML = "<img src='images/ok.png'>";
        }
        else{
          document.getElementById("addCart_"+appsVerId).innerHTML = "<img src='images/ok.png'> App added to Cart";
        }
      }
    }
    UserShoppingCart.saveIntoCart(appsVerId, userId, platformId, clickTracer, {callback:showStatus,errorHandler:error});
  }
	
}
/*
function payFromAccount(appsVerId, userId, platformId, clickTracer, referredUrl){

  if (userId==0){
    document.getElementById("addCart_"+appsVerId).innerHTML = "<a href='javascript:showLayer(\"loginBox\")'>Login</a> to buy app";
  }else{
    var showStatus = function(msgString){
      if (msgString.length>0){
        if (msgString[0]['status']=="done"){
          document.getElementById("addCart_"+appsVerId).innerHTML = "<img src='images/ok.png'> $xxx has been deducted from your account. Please use this link - http://m.mobileapps.com - to download your app";
        }
      }
    }
    Account.saveAppPayFromAccountDetails(appsVerId, userId, platformId, clickTracer, referredUrl,{callback:showStatus, errorHandler:error});
  }

}
*/
/* remove item from shopping cart */
function removeCart(appsVerId, userId){
  var showStatus = function(msgString){
    if (msgString.length>0){
      var result = msgString[0];
      var showItem = "1 item";
      if (result.totalItems >1){
        showItem = result.totalItems+" items";
      }
      document.getElementById("remove_"+appsVerId).innerHTML = "<i>App Removed</i>";	// remove the specific record
      document.getElementById("myCart").innerHTML = showItem;	// update # of items at top right corner
      document.getElementById("total").innerHTML = result.grandTotal;	// update the grand total
      document.getElementById("amount").value = result.grandTotal;	// update the form to pass to RBS too!
      if (result.grandTotal == 0.0){
        window.location.href=self.location.href;
      }
    }
  }
  UserShoppingCart.removeFromCart(appsVerId, userId, {callback:showStatus, errorHandler:error});
}

function saveLink(appsId, appsVerId){
  var url = document.getElementById("iTunesLink").value;
  if (!isEmpty(url)){
    var showStatus = function(msgString){
      if (msgString.length>0){
        document.getElementById("iTunesLink").value = "";
        document.getElementById("iTunesLinkStatus").value = "";
        var result = msgString[0];
        var text = "";
        text += "Added "+result.url;
        document.getElementById("iTuneStatus").innerHTML = text;
      }
    }
    AppsVersion.saveItunesLink(appsId, appsVerId, url,{callback:showStatus, errorHandler:error});
  }else{
    document.getElementById("iTunesLinkStatus").innerHTML = "No URL";
    return false;
  }
}

function selectOs(thisId, location){	
  var osId = thisId.value;
	if (osId>0){
		document.getElementById("platformError").innerHTML = "";
		var showStatus = function(msgString){
		var text = "";
			if (thisId.selectedIndex){
				if (msgString.length>0){
					for(var x=0;x<msgString.length;x++){
						var result = msgString[x];
						text += "<input type=checkbox class='os_name' name='os_name' value='"+result.id+"' checked> "+result.software+"&nbsp;&nbsp;&nbsp;"+result.hardware+"<br>";
					}
				}
				document.getElementById("platform_os").innerHTML = text;
			}else{
				document.getElementById("platform_os").innerHTML = "";
			}
		}
		document.getElementById("platform_os").innerHTML = "";
		OperatingSystem.findOs(osId, location, {callback:showStatus, errorHandler:error});
	}else{
		document.getElementById("platform_os").innerHTML = "";
		document.getElementById("platformError").innerHTML = "Please select a platform";return false;
	}
}

function changeStatusPhone(phoneModelId, flag, divId){
  var showStatus = function(msgString){
    document.getElementById(divId).innerHTML = "&nbsp;&nbsp;&nbsp;<i>Status updated</i>";
  }
  AppsCompatible.updateFlagStatus(phoneModelId, flag, {
    callback:showStatus,
    errorHandler:error
  });
}

function selectPhone(thisId, divId){	
  var phoneModelId = thisId.value;
  var flag = "";
  if (thisId.checked){
    flag = "on";
  }else{
    flag = "off";
  }
  changeStatusPhone(phoneModelId, flag, divId);
}

function publishVersion(appsVersionId, publish, existingAppsVersionId){
  var showStatus = function(msgString){
    if (publish=="Yes"){
      document.getElementById("publish_"+appsVersionId).innerHTML = "<a href='javascript:publishVersion("+appsVersionId+",\"No\", 0);'><input type='button' value='Unpublish' class='table-button2' title='Unpublish the app'></a>";
    }else{
      document.getElementById("publish_"+appsVersionId).innerHTML = "<a href='javascript:publishVersion("+appsVersionId+",\"Yes\", 0);'><input type='button' value='Publish Now' class='table-button2' title='Publish the app'></a>";
    }
  }
  AppsVersion.updatePubStatus(appsVersionId, existingAppsVersionId, publish, {callback:showStatus, errorHandler:error});
}

function publishVersionMyApp(appsVersionId, publish, existingAppsVersionId, activeCampaign){

	runningAds = " <a href='javascript:void(0)' onclick='javascript:publishVersionMyApp("+appsVersionId+",\"No\", 0, "+activeCampaign+");'>Unpublish this app</a>";
  campaigMessage ="";
  if (activeCampaign>0){
		campaigMessage = " (Campaign not running)";
		runningAds = " <span class='warning bold'>Unpublish App disabled. Running ad campaign</span>";
	}
  var showStatus = function(msgString){
    if (msgString=="Campaign"){
      document.getElementById("unable_"+appsVersionId).innerHTML = "Unpublish App disabled. Running ad campaign";
    }else{
      if (publish=="Yes"){
        document.getElementById("publish_"+appsVersionId).innerHTML = "App is published | "+runningAds;
				document.getElementById("publisherLink_"+appsVersionId).innerHTML = "<a href='campaign_add.jsp?appsVerId="+appsVersionId+"'>Advertise this app</a> | ";
      }else{
        document.getElementById("publish_"+appsVersionId).innerHTML = "<b>App is not published "+campaigMessage+"</b> | <a href='javascript:void(0)' onclick='javascript:publishVersionMyApp("+appsVersionId+",\"Yes\", 0, "+activeCampaign+");'>Publish this app</a>";
				//hideLayer("publisherLink_"+appsVersionId);
				document.getElementById("publisherLink_"+appsVersionId).innerHTML = "";
      }
    }
  }
  AppsVersion.updatePubStatus(appsVersionId, existingAppsVersionId, publish, {callback:showStatus, errorHandler:error});
}

function loadModel(thisId, location, modelIdLocation){
  var phoneId = thisId.value;
  var showStatus = function(msgString){
    var text = "";
    text += "<select id='setModel' name='setModel' class='popuplist' size=10 style='width:200px;height:200px' >";
    if (msgString.length>0){
      for (var x=0;x<msgString.length;x++){
        var result = msgString[x];
        text += "<option value='"+result.id+"'>"+result.model+"</option>";
      }
    }else{
      text += "<option value='0'>No models available.</option>";
    }
    text += "</select>";
    document.getElementById(modelIdLocation).innerHTML = text;
  }
  PhoneModel.findByPhoneIdAjax(phoneId, location, {callback:showStatus, errorHandler:error});
}
/*
function getSelectedValue(selectValue){
  var index = document.getElementById(selectValue).selectedIndex;
  var phoneId= document.getElementById(selectValue).value;
  var showStatus = function(msgString){
    if (msgString.length>0){
      var result = msgString[0];
      document.getElementById("message1").innerHTML = document.getElementById(selectValue).options[index].text;
      document.getElementById("message2").innerHTML = result.name;
      document.getElementById("message3").innerHTML = result.name;
    }
  }
	var userId = document.getElementById("phoneUserId").value;
  Platform.findByPhoneModelIdAjax(phoneId, userId, {callback:showStatus, errorHandler:error});
	
}
*/
/*
function setDefaultPicture(imageId, appsVerId){

	var showStatus = function(msgString){
		if (msgString.length>0){
			for (var i=0;i<msgString.length;i++){
				var result = msgString[i];
				
				if (result.priority == "1"){
					document.getElementById("defaultThere").value = "1";
					document.getElementById(result.id+"Status").innerHTML = "Default";
				}else{
					//document.getElementById("defaultThere").value = "0";
					document.getElementById(result.id+"Status").innerHTML = "";
				}	
				
			}
		}
	}
	AppsImage.setDefaultImage(imageId, appsVerId, {callback:showStatus, errorHandler:error});
}
 */
function removePicture(imageId, divId){
  var showStatus = function(msgString){
    document.getElementById(divId).innerHTML = "";
  }
  AppsImage.removeImage(imageId, {callback:showStatus, errorHandler:error});
}

function reloadImage(appsVerId, id, path){
  var showStatus = function(msgString){
    if (msgString.length>0){
      var text = "";
      for (var x=0;x<msgString.length;x++){
        var result = msgString[x];
        if (result.priority==0){
          text += "<div class='averageMargin'><input type=radio name='defaultImage' style='vertical-align:top' onClick='javascript:setDefaultPicture(\""+result.id+"\", \""+result.appsVersionId+"\")'> <img src='"+path+result.url+"' class='shrink-me'> <a href=''>Remove this image</a> <span class='bold orangeFont' id='"+result.id+"Status'></span></div>";
        }else{
          text += "<div class='averageMargin'><input type=radio name='defaultImage' style='vertical-align:top' onClick='javascript:setDefaultPicture(\""+result.id+"\", \""+result.appsVersionId+"\")' checked> <img src='"+path+result.url+"' class='shrink-me'> <a href=''>Remove this image</a> <span class='bold orangeFont' id='"+result.id+"Status'></span></div>";
        }
      }
      document.getElementById(id).innerHTML = text;
    }
  }
  AppsImage.findImages(appsVerId, {callback:showStatus, errorHandler:error});
}

function reloadApps(appsVerId, id, path){

  var showStatus = function(msgString){
    if (msgString.length>0){
      var text = "";
      for (var x=0;x<msgString.length;x++){
        var result = msgString[x];
        text += "<div> <a href='"+path+result.url+"'> "+result.url+" uploaded</a></div>";
      }
      document.getElementById(id).innerHTML = text;
    }else{
  //document.getElementById(id).innerHTML = "OK!";
  }
  }
  AppsVersion.findByAppsVerId(appsVerId,{callback:showStatus, errorHandler:error});
}

function checkValidVersion(appsId, id, version){

  var str = document.getElementById(version).value;

  if(!isEmpty(str)){
    var showStatus = function(msgString){
      if (msgString.length>0){
        document.getElementById(id).innerHTML = "<span class='warning bold'>This application version already exists. Please use another version.</span>";
      }else{
        document.getElementById(id).innerHTML = "";
      }
    }
    AppsVersion.findExistingVersion(str, appsId, {callback:showStatus, errorHandler:error});
  }else{
    document.getElementById(id).innerHTML = "<span class='warning bold'>Please key in your new applicaiton version</span>";
  }
}

function checkValidVersion1(appsId, id, version,curretnVersion){

  var str = document.getElementById(version).value;
	
  if(!isEmpty(str)){
    if(curretnVersion.toLowerCase() != str.toLowerCase()){
      var showStatus = function(msgString){
        if (msgString.length>0){
          document.getElementById(id).innerHTML = "<span class='warning bold'>This application version already exists. Please use another version.</span>";
        }else{
          document.getElementById(id).innerHTML = "";
        }
      }
      AppsVersion.findExistingVersion(str, appsId, {callback:showStatus, errorHandler:error});
    }else{
      document.getElementById(id).innerHTML = "";
    }
  }else{
    document.getElementById(id).innerHTML = "<span class='warning bold'>Please keyin the application version</span>";
  }
}

function checkVersion(appsId, id){
  var showStatus = function(msgString){
    if (msgString.length>0){
      var text = "";
      text += "<div style='padding:5px;'>";
      for (var i=0;i<msgString.length;i++){
        var result = msgString[i];
        text += "Version <b>"+result.version+"</b> <a href='application_detail_my.jsp?appsId="+appsId+"&appsVerId="+result.appsVerId+"'>View</a> ("+result.status+") <br>";
      }
      text +="(Do not enter version number above)";
      text += "</div>";
      document.getElementById(id).innerHTML = text;
    }
  }
  AppsVersion.findAppsVersion(appsId, {callback:showStatus, errorHandler:error});
}

function sendMessage(){
  var showStatus = function(msgString) {
  };
  if (isEmpty(dwr.util.getValue("message"))){
    document.getElementById("ownNote").innerHTML = "Please type your message";
    return false;
  }else{
    document.getElementById("ownNote").innerHTML = "";
    document.getElementById("message").focus;
    Chat.addMessage(dwr.util.getValue("message"), dwr.util.getValue("userId"),{callback:showStatus, errorHandler: error});
    document.getElementById("message").value="";
    scrollToBottom('focusChat');
  }
}

/*get the last x messages posted, and append to the current list*/
function findLatest(limit) {
  var username = dwr.util.getValue("username");
  var showStatus = function(msgString) {
    var text = "";
    var body = $("chatlog");
    if (msgString.length>0){
      var tbl     = document.createElement("table");
      var tblBody = document.createElement("tbody");
		
      for(var i=0;i<msgString.length;i++){
        var result = msgString[i];
        var row = document.createElement("tr");
				
        var cell2 = document.createElement("td");
        var spanx = document.createElement("span");
        spanx.style.fontWeight="bold";
        spanx.style.color="#0069ff";
        var cellText2 = document.createTextNode(username);
        spanx.appendChild(cellText2);
				
        if (result.role=="Teacher"){
          var imgx = document.createElement("img");
          imgx.setAttribute('src', "images/teacher.png");
          var cell5 = document.createTextNode(" ");
          spanx.appendChild(cell5);
          spanx.appendChild(imgx);
        }
        cell2.appendChild(spanx);
				
        var cell4 = document.createTextNode(" ");
        var cellText1 = document.createTextNode(result.dateTime);
        var cell4Pattern = document.createElement("i");
        var cellBr = document.createElement("br");
        cell4Pattern.appendChild(cellText1);
        cell2.appendChild(cellBr);
        cell2.appendChild(cell4);
        cell2.appendChild(cell4Pattern);
				
        var cell3 = document.createElement("br");
        var cellText3 = document.createTextNode(result.message);
        cell2.appendChild(cell3);
        cell2.appendChild(cellText3);
				
        row.appendChild(cell2);
        tblBody.appendChild(row);
      }
      tbl.appendChild(tblBody);
      body.appendChild(tbl);
    }
    scrollToBottom('focusChat');
  };
  Chat.findLatestAjax(limit,{callback:showStatus, errorHandler:error});
}

// download the file and record who download the file
function downloadFile(appsId, appsVerId,userId, price, platformId, location){
  var showStatus = function(msgString) {
  /*if (msgString.length>0){
			var result = msgString[0];
			document.getElementById("appsCount").innerHTML=result.appsCount;
			document.getElementById("userCount").innerHTML=result.userCount;
			document.getElementById("appsVerCount").innerHTML=result.appsVerCount;
		}*/
  };
  AppsDownload.addAjax(appsId, appsVerId, userId, price, platformId, location, {callback:showStatus, errorHandler:error});
}

// record who download aggregated app
function downloadAggregatedFile(appsId, appsVerId,userId, price, platformId, aggregated, redirectUrl, location){
		var showStatus = function(msgString) {
			window.open(redirectUrl);
		};
		AppsDownload.addAggregatedAjax(appsId, appsVerId, userId, price, platformId, aggregated, location, {callback:showStatus, errorHandler: error});
}

function downloadApp(appsId, appsVerId, userId, userIP, price, platformId, aggregated, url, location){

  var showStatus = function(msgString){
      if(aggregated =='Yes'){
        window.open(url);
        hideLayer('downloadBox');
      }else{
        window.open(url,'Download');
        hideLayer('downloadBox');
      }
  }
  AppsDownload.addDownloadAjax(appsId, appsVerId, userId, userIP, price, platformId, aggregated, location, {callback:showStatus, errorHandler:error});
}

function sendEmail(appsId, clickTracer, referredUrl, location){

  var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
  email = document.getElementById('email').value;
  if (filter.test(email)){
    var showStatus = function(msgString){
      document.getElementById("emailError").innerHTML = "<img style=\"float:left\" src='images/right.png'/><div style=\"float:left;padding-top:5px;\">email sent.</div>";
      timer=setTimeout("hideLayer('downloadBox')",1500);
    }
    User.sendEmailAjax(email, appsId, clickTracer, referredUrl, location, {callback:showStatus, errorHandler:error});
  }else{
    document.getElementById('emailError').innerHTML = "<span class=\"warning bold\"> Invalid email address.</span>";
  }
}

function findIntroducer(id, state, type, location){
  introducer = document.getElementById(id).value;
  getIntroducer(introducer, state, type, location);
}

function getIntroducer(introducer,state, type, location){
  var showStatus = function(msgString) {
    if (!isEmpty(introducer)){
      if (msgString.length<1){
        document.getElementById(state).innerHTML = "<span  class=\"warning bold\"> "+type+" ID entered is invalid.</span>";
      }else{
        document.getElementById(state).innerHTML = "<span  class=\"goodMessage bold\"> "+type+" ID is valid.</span>";
      }
    }else{
      document.getElementById(state).innerHTML = "";
    }
  };
  User.usernameValidAjax(introducer, location, {callback:showStatus, errorHandler:error});
}

function findUser(id,state, location){
  var showStatus = function(msgString) {
    if (msgString.length<1){
      document.getElementById(state).innerHTML = "<span  class=\"warning bold\"> Username does not exist</span>";
    }else{
      document.getElementById(state).innerHTML = "<span  class=\"goodMessage bold\"> Username is valid.</span>";
    }
  };
  var username = document.getElementById(id).value; 
	User.usernameValidAjax(username, location, {callback:showStatus, errorHandler:error});
}

/* whether the new login name is the same as current or not */
function checkExistingUser2(currentLogin, id,state, location){
  var str=document.getElementById(id).value;
  if (currentLogin != str){
    var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
    if (filter.test(str)){
      var showStatus = function(msgString) {
        if (msgString.length<1){
          document.getElementById(state).innerHTML = "<span  class=\"goodMessage bold\"> Login name is available</span>";
        }else{
          document.getElementById(state).innerHTML = "<span  class=\"warning bold\">Email already taken. Please use another.</span>";
        }
      };
      User.usernameValidAjax(str, location, {callback:showStatus, errorHandler:error});
			
    }else{
      document.getElementById(state).innerHTML = "<span class=\"warning bold\"> Invalid email address.</span>";
    }
  }else{
    document.getElementById(state).innerHTML = "<span  class=\"goodMessage bold\"> Login name is the same as current</span>";
  }
}

function checkExistingUser(id,state){
  var str=document.getElementById(id).value;
  var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i

	document.getElementById(state).innerHTML = "";
  
  if(!isEmpty(str)){
    if (filter.test(str)){
      var showStatus = function(msgString) {
        if (msgString.length<1){
          document.getElementById(state).innerHTML = ""; //"<span  class=\"goodMessage bold\"> <img src=\"images/correct.png\"> Login name is available</span>";
        }else{
          document.getElementById(state).innerHTML = "<span class=\"warning bold\">Email already taken. Please use another.</span>";
        }
      };
      var location = "";
      User.usernameValidAjax(str, location, {callback:showStatus, errorHandler: error});

    }else{
      document.getElementById(state).innerHTML = "<span class=\"warning bold\"> Invalid email address.</span>";
    }
  }else{
    document.getElementById(state).innerHTML = "<span class=\"warning bold\"> Email must be filled out!</span>";
  }
}

function checkExistingEmail(id,state){
  var location = "";
  var str=document.getElementById(id).value;
	var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i

	if(!isEmpty(str)){
		if (filter.test(str)){

			var showStatus = function(msgString) {
				if (msgString.length<1){
					document.getElementById(state).innerHTML = "<span class=\"warning bold\">This email address is incorrect, please use you registered email address.</span>";
				}else{
					document.getElementById(state).innerHTML = "";
				}
			};
			User.usernameValidAjax(str,location, {callback:showStatus, errorHandler: error});

		}else{
			document.getElementById(state).innerHTML = "<span class=\"warning bold\"> Invalid email address.</span>";

		}
	}else{
		document.getElementById(state).innerHTML = "<span class=\"warning bold\"> Email must be filled out!</span>";
	}
}

function checkExistingApps(id,state){

  var str=document.getElementById(id).value;
	
  if(!isEmpty(str)){
    var showStatus = function(msgString) {
      if (msgString.length<1){
        document.getElementById(state).innerHTML = "";
      }else{
        document.getElementById(state).innerHTML = "<span  class=\"warning bold\"> Application name has been taken. Please use another name.</span>";
      }
    };
    document.getElementById(state).innerHTML = "<div style='float:left;'><img src='images/loading.gif'/></div><div style='float:left;padding-left:5px;'>checking...</div>";
    Apps.appsNameValidAjax(str, {callback:showStatus, errorHandler: error});
  } else{
    document.getElementById(state).innerHTML = "";	
  }
}

function checkExistingApps1(id,state,currentName){

  var str=document.getElementById(id).value;
	
  if(!isEmpty(str)){
    if(str.toLowerCase()!= currentName.toLowerCase()){
      var showStatus = function(msgString) {
        if (msgString.length<1){
          document.getElementById(state).innerHTML = "";
        }else{
          document.getElementById(state).innerHTML = "<span  class=\"warning bold\"> Application name has been taken. Please use another name.</span>";
        }
      };
      Apps.appsNameValidAjax(str, {callback:showStatus, errorHandler: error});
    } else{
      document.getElementById(state).innerHTML = "";
    }
  } else{
    document.getElementById(state).innerHTML = "";	
  }
}

function checkExistingWidgets(id,state){

  var str=document.getElementById(id).value;

  if(!isEmpty(str)){
    var showStatus = function(msgString) {
      if (msgString.length<1){
        document.getElementById(state).innerHTML = "";
      }else{
        document.getElementById(state).innerHTML = "<span  class=\"warning bold\"> Widget name has been taken. Please use another name.</span>";
      }
    };
    document.getElementById(state).innerHTML = "<div style='float:left;'><img src='images/loading.gif'/></div><div style='float:left;padding-left:5px;'>checking...</div>";
    Widget.widgetsNameValidAjax(str, {callback:showStatus, errorHandler: error});
  } else{
    document.getElementById(state).innerHTML = "";
  }
}

// Usage: profile.jsp
// Check if the email address is already exist in db
// to prevent duplicated email in system
function checkExistingUserExOwn(id,current){
  var email = document.getElementById(id).value;
  var cEmail = document.getElementById(current).value;
  // if the email address is empty
  if (email != cEmail){
    if (isEmpty(email)){
      document.getElementById(id+"Error").innerHTML = "<span  class=\"warning bold\"> Email address required.</span>";
    }
    // check USER list first
    var showStatus = function(msgString) {
      if (msgString.length>0){
        document.getElementById(id+"Error").innerHTML = "<span  class=\"warning bold\"> This email has already been registered by another person.</span>";
      }
    };
    User.findByEmailAjax(email, {callback:showStatus, errorHandler:error});
  }
}

// usage : register.jsp
//check if login name is redundant, <6 , >32 character 
function findUsername(id, state){
  username = document.getElementById(id).value;
  //var illegal=/\W/; // allow letters, numbers, and underscores
  var illegal = /\W/;
  if (isEmpty(username)){
    document.getElementById(state).innerHTML = "<span  class=\"warning bold\"> Please enter your login name</span>";
    return false;
  }else if ((username.length < 6) || (username.length > 32)) {
    document.getElementById(state).innerHTML = "<span  class=\"warning bold\"> Use 6 to 32 characters. You may use letters, numbers, and underscores.</span>";
    return false;
  }else if (illegal.test(username)){
    document.getElementById(state).innerHTML = "<span  class=\"warning bold\"> Please enter a valid login name, you may use letters, numbers and underscores.</span>";
    return false;
  }else{
    getUsername(username, state, location);
  }
}

function getUsername(username,state, location){
  var showStatus = function(msgString) {
    if (msgString<1){
      document.getElementById(state).innerHTML = "<span  class=\"goodMessage bold\"> Login name is available</span>";
    }else{
      document.getElementById(state).innerHTML = "<span  class=\"warning bold\"> Login name is not available</span>";
    }
  };
  User.usernameValidAjax(username, location, {callback:showStatus, errorHandler:error});
}

/****************************** Advertisement **********************************************/
function removeAdvertisement(id, userId, type){
  var showStatus = function(msgString) {
    //hideLayer("appsVerId_"+id);
		
    if (msgString.length>0){
      var result = msgString[0];
      document.getElementById("adv_"+id).innerHTML = "<i>Ads Removed</i>";	// remove the specific record
      document.getElementById("total").innerHTML = result.grandTotal;	// update the grand total
    //document.getElementById("amount").value = result.grandTotal;	// update the form to pass to RBS too!
    }
  }
  ImpressionPrice.removeApps(id, userId, {callback:showStatus, errorHandler:error});
}

function getTopPaid(widgetId, appsVerId, affiliateUrlId, userId){
  var pageNo = 0;
  var status = "Approved";
	
  var showStatus = function(msgString) {
    var text = "";
    text += "<div style='margin-bottom:15px;padding:10px;border-left:4px solid #f3f3f3;border-right:4px solid #f3f3f3;border-bottom:4px solid #f3f3f3;border-top:1px dotted #f3f3f3;'>";
    text += "<table width='100%' class='lightBorder3'>";
    text += "<tr class='bold'><td colspan=3><h3>Top 10 Advertisers</h3></td></tr>";
    text += "<tr class='bold'><td width='3%'></td><td width='50%'>Name</td><td>US$ / 1000 Impressions</td></tr>";
    if (msgString.length>0){
      var size=5;
      if (msgString.length>5){
        size = 5;
      }else{
        size = msgString.length;
      }
      for (var i=0;i<size;i++){
        var result = msgString[i];
        if (result.userId==userId){
					// use (Math.floor(result.pricePerClick*100)/100) to do round down, then toFixed(2) to make it shown in 2 decimal point
          text += "<tr><td>"+(i+1)+"</td><td>"+result.name+" <b>(My Ads)</b></td><td>$ "+(Math.floor(result.pricePerClick*100)/100).toFixed(2)+"</td></tr>";
        }else{
          text += "<tr><td>"+(i+1)+"</td><td>"+result.name+"</td><td>$ "+(Math.floor(result.pricePerClick*100)/100).toFixed(2)+"</td></tr>";
        }
      }
    }else{
      text += "<tr><td class='italic' align=center colspan=2>No record available.</td></tr>";
    }
    text +="</table>";
    text +="</div>";
    document.getElementById("msg_"+affiliateUrlId+"_"+widgetId).innerHTML = "<a href='javascript:void(0)' onclick='javascript:hideRenew("+widgetId+", "+affiliateUrlId+", "+appsVerId+", "+userId+")'><img src='./images/close.png' style='vertical-align:middle'> close</a>";
		
    document.getElementById("showTopPaid_"+affiliateUrlId+"_"+widgetId).innerHTML = text;
    showLayer("showTopPaid_"+affiliateUrlId+"_"+widgetId);
    showLayer("payment_"+affiliateUrlId+"_"+widgetId);
  }
	
  ImpressionPrice.findTopPaid(affiliateUrlId, widgetId, status, pageNo, {callback:showStatus, errorHandler:error});
}

function hideRenew(widgetId, id, appsVerId, userId){
  hideLayer("showTopPaid_"+id+"_"+widgetId);
  hideLayer("payment_"+id+"_"+widgetId);
  document.getElementById("msg_"+id+"_"+widgetId).innerHTML = "<a href='javascript:void(0)' onclick='javascript:getTopPaid("+widgetId+", "+appsVerId+", "+id+", "+userId+")'>Top Ads</a> ";
}

/*
function getRanking(perClick, affiliateUrlId){
	var status = "Active";
	var showStatus = function(msgString) { 
	}
	ImpressionPrice.findCurrentRanking(perClick, affiliateUrlId, status,  {callback:showStatus, errorHandler:error});
}
 */
/**********************************************************************************************/

var useLoadingMessageDefault = function(message) {
  var loadingMessage;
  if (message) loadingMessage = message;
  else loadingMessage = "Loading";
  dwr.engine.setPreHook(function() {
    var disabledZone = dwr.util.byId('disabledZone');
    if (!disabledZone) {
      disabledZone = document.createElement('div');
      disabledZone.setAttribute('id', 'disabledZone');
      disabledZone.style.position = "absolute";
      disabledZone.style.zIndex = "1000";
      disabledZone.style.left = "-200px";
      disabledZone.style.top = "515px";
      disabledZone.style.width = "100%";
      disabledZone.style.height = "100%";
      //disabledZone.style.background = "red";
      //disabledZone.style.color = "white";
      document.body.appendChild(disabledZone);
      var messageZone = document.createElement('div');
      messageZone.setAttribute('id', 'messageZone');
      messageZone.style.position = "absolute";
      messageZone.style.top = "0px";
      messageZone.style.right = "0px";
      messageZone.style.background = "red";
      messageZone.style.color = "white";
      messageZone.style.fontSize = "16px";
      messageZone.style.fontFamily = "Arial,Helvetica,sans-serif";
      messageZone.style.padding = "4px";
      disabledZone.appendChild(messageZone);
      var text = document.createTextNode(loadingMessage);
      messageZone.appendChild(text);
      dwr.util._disabledZoneUseCount = 1;
    }
    else {
      dwr.util.byId('messageZone').innerHTML = loadingMessage;
      disabledZone.style.visibility = 'visible';
      dwr.util._disabledZoneUseCount++;
    }
  });
  dwr.engine.setPostHook(function() {
    dwr.util._disabledZoneUseCount--;
    if (dwr.util._disabledZoneUseCount == 0) {
      dwr.util.byId('disabledZone').style.visibility = 'hidden';
    }
  });
}

function useLoadingMessage(message) {
  var loadingMessage;
  if (message) loadingMessage = message;
  else loadingMessage = "Loading...";
	
  dwr.engine.setPreHook(function() {
    var disabledZone = $('disabledZone');
    if (!disabledZone || document.getElementById("disabledZone")==null) {
    
      document.getElementById("result0").innerHTML = "<img src='./images/jackpot/pic1.gif'>";
      document.getElementById("result1").innerHTML = "<img src='./images/jackpot/pic3.gif'>";
      document.getElementById("result2").innerHTML = "<img src='./images/jackpot/pic5.gif'>";
      document.getElementById("result3").innerHTML = "<img src='./images/jackpot/pic4.gif'>";
      document.getElementById("result4").innerHTML = "<img src='./images/jackpot/pic2.gif'>";
      
      disabledZone = document.createElement('div');
      disabledZone.setAttribute('id', 'disabledZone');
      disabledZone.style.position = "absolute";
      disabledZone.style.zIndex = "1000";
      //disabledZone.style.left = "0px";
      //disabledZone.style.top = "0px";
      disabledZone.style.width = "50%";
      disabledZone.style.height = "100%";
      document.body.appendChild(disabledZone);
      document.getElementById("ok").appendChild(disabledZone);
      
      var messageZone = document.createElement('div');
      messageZone.setAttribute('id', 'messageZone');
      messageZone.style.position = "absolute";
      messageZone.style.background = "red";
      messageZone.style.color = "white";
      messageZone.style.fontWeight = "bold";
      messageZone.style.fontFamily = "Arial,Helvetica,sans-serif";
      messageZone.style.padding = "4px";
      disabledZone.appendChild(messageZone);
      var text = document.createTextNode(loadingMessage);
      messageZone.appendChild(text);
      
    } else {
      document.getElementById("result0").innerHTML = "<img src='./images/jackpot/pic5.gif'>";
      document.getElementById("result1").innerHTML = "<img src='./images/jackpot/pic2.gif'>";
      document.getElementById("result2").innerHTML = "<img src='./images/jackpot/pic1.gif'>";
      document.getElementById("result3").innerHTML = "<img src='./images/jackpot/pic4.gif'>";
      document.getElementById("result4").innerHTML = "<img src='./images/jackpot/pic3.gif'>";
      $('messageZone').innerHTML = loadingMessage;
      if (document.getElementById("disabledZone")!=null)
        document.getElementById("disabledZone").style.visibility = 'visible';
    }
  });
  dwr.engine.setPostHook(function() {
    if (document.getElementById("disabledZone")!=null)
      document.getElementById("disabledZone").style.visibility = 'hidden';
  });
}

function error(err){
//alert(err);
}

function showAppsDetails(appsId, appsVerId, userId, appsImageUrl,catId,platId,clickTracer){
  //useLoadingMessageDefault("App Loading....")
  var showStatus = function(msgString) {
    document.getElementById("appsContent").innerHTML ="Not records found";
    if (msgString.length>0){
      var result = msgString[0];
      var text = "";
      text += "<div style='overflow:hidden;height:460px'>"
      +"<table width='100%'>"
      +"<tr><td><div class='bold averageFont averageMargin' style='width:100%'>"
      +"<a href='application_detail.jsp?appsId="+appsId+"&appsVerId="+appsVerId+"&platform="+platId+"&category="+catId+"'>"
      +"<h1>"+result.name+"</h1>"
      +"</a>"
      +"</div>";
      if(result.userId == 0 ){
        text += "<p class='green'>Developer : "+result.nameDev+"</p>";
      } else {
        if (isEmpty(result.website)){
          text += "<p class='green'>Developer : <a href='application_user.jsp?userId="+result.userId+"&platform="+platId+"&category="+catId+"'>"+result.nameDev+"</a></p>";
        }else{
          text += "<p class='green'>Developer : <a href='application_user.jsp?userId="+result.userId+"&platform="+platId+"&category="+catId+"'>"+result.website+"</a></p>";
        }
      }
      text += "</td>";
      text +="<td width='96' align='right' valign='top'>";
     // if (userId>0){
				//text +="<a href='javascript:saveCart("+appsVerId+", "+userId+");'><img src='images/addcart-but.gif' width='96' height='26' /></a> <div class='warning smallFont' style='padding-top:5px;' id='addCart_"+appsVerId+"'></div>";
			//	text +="<div style='padding-top:5px;'><input type=button class='table-button' id='payButton' value='Buy Now' onclick='checkPhone2("+platId+", \"Please Select Your Device\", \""+appsVerId+"\",\""+userId+"\", \""+clickTracer+"\");'><span id='addCart_"+appsVerId+"'></span></div>";
			//}
      /*
      text +="<div style='float:right;'><a href='application_detail.jsp?appsId="+appsId+"&appsVerId="+appsVerId+"&platform="+platId+"&category="+catId+"'>More &hellip;</a></div>";
      */
     text +="</td></tr>";
      
      var appsDes = subStringWork(result.description,80,5);
      
      if(appsDes[0]){
        text +="<tr><td colspan=2>"+appsDes[1];
        text +="<div style='float:right;'><a href='application_detail.jsp?appsId="+appsId+"&appsVerId="+appsVerId+"&platform="+platId+"&category="+catId+"'>More &hellip;</a></div>";
      }
      else{
        var splitWord = appsDes[1].split("<br/>");
        text +="<tr><td colspan=2>"+splitWord[0];
      }
      text += "</td></tr>";
      
      text +="<tr><td colspan=2>&nbsp;</td></tr>";
      text +="<tr><td colspan=2><table><tr>";
			
      for (var p=0;p<msgString.length&&p<2;p++){
        text += "<td style='padding:5px;'><a href='application_detail.jsp?appsId="+appsId+"&appsVerId="+appsVerId+"&platform="+platId+"&category="+catId+"'><img src='"+appsImageUrl+msgString[p].url+"' class='shrink-me-details-fix' onerror=\"this.src='images/nopicture.jpg';\"></a></td>";
      }

      text +="</tr></table>";
      text += "</td></tr></table>";
      text += "</div>";
      document.getElementById("appsContent").innerHTML = text;
    //$('.shrink-me-details').jScale({ls:'250px', speed:1});
    }
  };
  Apps.findAppsDetails(appsId,appsVerId, {callback:showStatus, errorHandler:error});
}


function getAppsReviews(appsId, appsVersionId, location){
	var text = "";
	var text3 = "";
  var showStatus = function(msgString){
    var count = msgString.length;
    var count2 = 0;
    var count2Max = 3;
    var text2 = "";
    
    if (msgString.length>0){
      //count= msgString.length;
      for (var x=0;x<msgString.length;x++){
        var result = msgString[x];
        text += "<div style='padding:3px;margin:5px 0;width:100%;'> ";
        text += "<div class='read-review'><span style='font-size:13px;font-weight:bold'>"+result.name+" &nbsp;&nbsp;<span class='mini-font'>("+result.source+")</span></span>&nbsp;&nbsp;&nbsp;"+result.review+"<div class='mini-font'>"+result.dateTime+"</div></div>";
        text += "</div>";
				
        if(count2 < count2Max)
        {
          text2 += "<div style='padding:3px;margin:5px 0;width:100%;'> ";
          text2 += "<div class='read-review'><span style='font-size:13px;font-weight:bold'>"+result.name+" &nbsp;&nbsp;<span class='mini-font'>("+result.source+")</span></span>&nbsp;&nbsp;&nbsp;"+result.review+"<div class='mini-font'>"+result.dateTime+"</div></div>";
          text2 += "</div>";
          count2++;
        }
      }
			
      if(count>count2Max)
        text3 = "<a href='javascript:void(0)' onclick='javascript:showTab(\"reviews\");'>Read All Reviews</a>";
				
    }else{
      text += "<div>No review yet.</div>";
      text2 += "<div>No review yet.</div>";
    }
    document.getElementById("reviews_"+appsId+"_"+appsVersionId).innerHTML = text;
    document.getElementById("reviews2_"+appsId+"_"+appsVersionId).innerHTML = text2;
    document.getElementById("countReviews").innerHTML = "Reviews (" +count +")";
    document.getElementById("moreReviews2").innerHTML = text3;
  };
	
  AppsReview.findReviews(appsId, appsVersionId, location, {callback:showStatus, errorHandler:error});
}

function addComment(appsId, appsVerId, userId, location){
  var comments = document.getElementById("myComment_"+appsId+"_"+appsVerId).value;
  var source = "MobileApps";
  if (userId==0 || isEmpty(comments)){
    if (userId==0){
      errorMessage = "Login to leave comment";
    }else{
      errorMessage = "Please write something";
    }
    document.getElementById("reviewError_"+appsId+"_"+appsVerId).innerHTML = errorMessage;
  }else{
    var text = "";
    var showStatus = function(msgString){
      var count = "";
      var count2 = 0;
      var count2Max = 3;
      var text2 = "";
      if (msgString.length>0){
        for (var x=0;x<msgString.length;x++){
          count= msgString.length;
          var result = msgString[x];
          text += "<div style='padding:3px;margin:5px 0;width:100%;'> ";
          text += "<div class='read-review'><span style='font-size:13px;font-weight:bold'>"+result.name+" &nbsp;&nbsp;<span class='mini-font'>("+result.source+")</span></span>&nbsp;&nbsp;&nbsp;"+result.review+"<div class='mini-font'>"+result.dateTime+"</div></div>";
					
          text += "</div>";
					
          if(count2 < count2Max)
          {
            text2 += "<div style='padding:3px;margin:5px 0;width:100%;'> ";
            text2 += "<div class='read-review'><span style='font-size:13px;font-weight:bold'>"+result.name+" &nbsp;&nbsp;<span class='mini-font'>("+result.source+")</span></span>&nbsp;&nbsp;&nbsp;"+result.review+"<div class='mini-font'>"+result.dateTime+"</div></div>";
            text2 += "</div>";
            count2++;
          }
        }
      }
      document.getElementById("reviews_"+appsId+"_"+appsVerId).innerHTML = text;
      document.getElementById("reviews2_"+appsId+"_"+appsVerId).innerHTML = text2;
      document.getElementById("countReviews").innerHTML = "Reviews (" +count +")";
      document.getElementById("reviewError_"+appsId+"_"+appsVerId).innerHTML = "<img src='images/ok.png'> Added";

      hideLayer("myReview_"+appsId+"_"+appsVerId);
    }
    AppsReview.addReview(appsId, appsVerId, userId, comments, source, location, {callback:showStatus, errorHandler:error});
  }
}

// save this payment if grandtotal in shopping cart is >0 and pay by credit card
/*
function savePayment(userId){
	var showStatus = function(msgString){

	}
	var price = document.getElementById("amount_topup").value;
	var currency = document.getElementById("currency_topup").value;
	var cartId = document.getElementById("cartId").value;
	Payment.savePaymentDetails(userId, price, currency, cartId, {callback:showStatus, errorHandler:error});
}

// save this payment if grandtotal in shopping cart is 0, cos RBS gives error if proceed to checkout when amount is 0
function saveFreePayment(userId){
	var showStatus = function(msgString){
		window.location.href="my_home.jsp?status=freeapps";
	}
	var price = document.getElementById("amount_topup").value;
	var currency = document.getElementById("currency_topup").value;
	var cartId = document.getElementById("cartId").value;
	
	Payment.saveFreePaymentDetails(userId, price, currency, cartId, {callback:showStatus, errorHandler:error});
}*/

// top up account for user
/*
aiwei : maybe not needed (04-July-2011)
function saveTopUp(userId, gatewayType, accountType){

  var showStatus = function(msgString){
  }
  var type = "";
  var price = "";
  if (gatewayType=="PayPal"){
    type = "2";
    price = document.getElementById("amount2").value;
  }else{
    price = document.getElementById("amount3").value;
  }
  
  var currency = document.getElementById("currency").value;
  var cartId = document.getElementById("cartId"+type).value;
  PaymentTopup.saveTopUpDetails(userId, price, currency, cartId, gatewayType, accountType, {callback:showStatus, errorHandler:error});
	
}
*/
/*
function savePayByAccount(userId){
	if (confirm("Confirm Payment?")){
		var showStatus = function(msgString){
			window.location.href=self.location.href+"?status=paidApps";
		}
		var price = document.getElementById("amount_topup").value;
		var currency = document.getElementById("currency_topup").value;
		Account.savePayFromAccountDetails(userId, price, currency, {callback:showStatus, errorHandler:error});
	
	}else{
		return false;
	}
}
 */
 
/*
function saveAdsPayByAccount(userId){
  var showStatus = function(msgString){
    window.location.href=self.location.href;
  }
  var price = document.getElementById("amount_topup").value;
  var currency = document.getElementById("currency_topup").value;
  //var cartId = document.getElementById("cartId_topup").value;

  Account.saveAdsPayFromAccountDetails(userId, price, currency, {callback:showStatus, errorHandler:error});
}
*/
/*
function saveAdsPayment(userId){
	var showStatus = function(msgString){
	}
	var price = document.getElementById("amount_topup").value;
	var currency = document.getElementById("currency_topup").value;
	var cartId = document.getElementById("cartId").value;
	
	Payment.saveAdsPaymentDetails(userId, price, currency, cartId, {callback:showStatus, errorHandler:error});
}
 */

function loadDownloadChart(userId) {
	var startDate = document.getElementById("startDate");
	var endDate = document.getElementById("endDate");
	var previousStartDate = document.getElementById("previousStartDate");
	var previousEndDate = document.getElementById("previousEndDate");
	if (validateDateRange(startDate, endDate, previousStartDate, previousEndDate)){
		var apps = document.getElementById("apps");
		var chart = document.getElementById("chart");
		var filter = document.getElementById("filter");
		var downloadType = document.getElementById("downloadType").value;
		
		chart.innerHTML = "";
		chart.innerHTML = "<img src='/mobileapps/ChartServlet?appsIds=" + apps.value + "&userId=" + userId + "&startDate=" + startDate.value + "&endDate=" + endDate.value + "&downloadType="+downloadType+"'/>";
		loadDownloadTrend(document.getElementById("trendType").value, userId, 1);
		
	}
}

function loadDownloadTrend(type, userId, pageNo) {
	var downloadType = document.getElementById("downloadType").value;
	var apps = document.getElementById("apps");
	var startDate = document.getElementById("startDate");
	var endDate = document.getElementById("endDate");
	var filter = document.getElementById("filter");
	var trendType = document.getElementById("trendType");
	
	if (type == "version" && (apps.value == "")) {
		alert("You can only select one apps for this trend");
		return;
	}
	
	var showStatus = function(msgString) {
		var trend = document.getElementById("trend");
		
		trend.innerHTML = "";

		if (msgString.length > 0) {
			trend.innerHTML = msgString[0].trend;
		}
	}
	
	trendType.value = type;
	AppsDownload.findTrend(apps.value, startDate.value, endDate.value, type, filter.value, userId, downloadType, pageNo, {callback:showStatus, errorHandler:error});

}

function validateDateRange(startDateElement, endDateElement, previousStartDateHiddenElement, previousEndDateHiddenElement) {
  var startDate = new Date(startDateElement.value.substring(0, 4) + '/' + startDateElement.value.substring(5, 7) + '/' + startDateElement.value.substring(8, 10));
  var endDate = new Date(endDateElement.value.substring(0, 4) + '/' + endDateElement.value.substring(5, 7) + '/' + endDateElement.value.substring(8, 10));

  if (startDate > endDate) {
    alert("Start date cannot be later than end date");
    startDateElement.value = previousStartDateHiddenElement.value;
    endDateElement.value = previousEndDateHiddenElement.value;
    return false;
  }
  previousStartDateHiddenElement.value = startDateElement.value;
  previousEndDateHiddenElement.value = endDateElement.value;
  return true;
	
}

// developer's dashboard, to check download for a date range
function checkDateRange(startDate, endDate, userId){
  var start = document.getElementById(startDate).value;
  var end = document.getElementById(endDate).value;
  if (start > end) {
    alert("Start date cannot be later than end date");
    document.getElementById(endDate).value = start;
    return false;
  }else{
    document.getElementById("rangeReport").innerHTML ="";
    var showStatus = function(msgString){
      var text = "";
      if (msgString.length>0){
        for (var p=0;p<msgString.length;p++){
          var result = msgString[p];
          text += "<div style='width:70%;float:left'>Date Range "+result.startDate+" - "+result.endDate+" </div><div style='width:30%;float:left'>: "+result.count+" ";
					if (result.count>1){
						text += "downloads";
					}else{
						text += "download";
					}
					text += "</div>";
        }
      }
			
      document.getElementById("rangeReport").innerHTML = text;
    }
    AppsDownload.findDateRange(userId, start, end, {callback:showStatus, errorHandler:error});
  }
}

function findAppsIcon(id){
  var appsVersionId = id.value;
  var imageUrl = document.getElementById("imageUrl").value;
  var showStatus = function(msgString){
    var text = "";
    if (msgString.length>0){
      for (i=0;i<msgString.length;i++){
        var result = msgString[i];
        document.getElementById("adsShowIcon").innerHTML = "<img src='"+imageUrl+result.url+"' width='24' height='24' title='Click here' style='margin-right:5px; cursor: pointer;' vspace=3 border=0 align='left' />";
      }
    }
  }
  AppsImage.findImages(appsVersionId, {callback:showStatus, errorHandler:error});
}


function publishVersionCheck(appsId, appsVersionId, existingAppsVersionId, status){
  var showStatus = function(msgString){
    if (isEmpty(msgString)){
      document.getElementById("publishMessage").innerHTML = "Your app profile page is published.";
      document.getElementById("publishbutton").innerHTML = "<input type='button'  value='Ok' class='table-button' tabindex='3' onClick='window.location.href=\"application_my.jsp\"'>";
			showLayer('messagePublish');
    }else{
      document.getElementById("publishMessage").innerHTML = "Cannot publish, no "+msgString+" is uploaded.";
      document.getElementById("publishbutton").innerHTML = "<input type='button' onclick='javascript:hideLayer(\"messagePublish\");' value='Close' class='table-button' >";
			showLayer('messagePublish');
    }
		document.getElementById("publishingError").innerHTML = "";
	
  };
	document.getElementById("publishingError").innerHTML = "<div style='float:left;'><img src='images/loading.gif'/></div><div style='float:left;padding-left:5px;'> publishing...</div>";
	
  AppsVersion.updatePubStatus(appsVersionId, existingAppsVersionId, status, {callback:showStatus, errorHandler:error});
}

function sendFeedback(){
  var fuserId = document.getElementById("fuserId").value;
  var fname = document.getElementById("fname").value;
  var femail = document.getElementById("femail").value;
  var fmessage = document.getElementById("fmessage").value;
  var ftype = document.getElementById("ftype").value;
	var location = document.getElementById("location").value;
	
  document.getElementById("loadingMsg").innerHTML = "<img src='images/loading.gif'/><div style=\"float:right;padding-top:5px;\">sending...</div>";
	
  var showStatus = function(){
    document.getElementById("loadingMsg").innerHTML = "<img src='images/right.png'/><div style=\"float:right;padding-top:5px;\">message sent.</div>";
    timer=setTimeout("pendingFeedback()",1500);
		
  };
	
  Support.updateFeedback(fuserId,fname,femail,fmessage,ftype, location, {callback:showStatus, errorHandler:error});
}

function pendingFeedback(){
  hideLayer("feedbackMessage");
}

function findSubCat(data){
  document.getElementById("subCatTitle").innerHTML = "";
  document.getElementById("subCatId").innerHTML = "";
  var catId = data.value;
  var showStatus = function(msgString){
    var text = "";
    var text2 = "";
    if (msgString.length>0){
      text += "<br></span> <select name='subCat' class='table-input-list-short'>";
      for (i=0;i<msgString.length;i++){
        var result = msgString[i];
        text += "<option value='"+result.id+"'>"+result.name+"</option>";
      }
      text += "</select>";
      text2 = "<br><br>Sub Category";
    }
    document.getElementById("subCatTitle").innerHTML = text2;
    document.getElementById("subCatId").innerHTML = text;
  }
  Category.findSubCategoryAjax(catId, {callback:showStatus, errorHandler:error});
}

function sendTobitly(url){
  var xhr = new XMLHttpRequest();
  xhr.open("GET", "http://api.bit.ly/v3/shorten?login=boonsheng&apiKey=R_e023642a05adbdd3ebc8f98215fa6c61&longUrl=http%3A%2F%2Fbetaworks.com%2F");
  //xhr.open("GET", url);
  xhr.onreadystatechange = function(data) {
    if(xhr.readyState == 4) { 
      if(xhr.status==200) {
        //document.getElementById("test").innerHTML= xhr.responseText;
        for(var r in data.results)
        {
          document.getElementById("test").innerHTML= data.results[r];
        }
      } else {
        document.getElementById("test").innerHTML= xhr.responseText;
      }
    } 
  }
  xhr.send();
}

/*
Aiwei : construct and display layer to show publisher's details in campaign_choose.jsp
 */
/*function insertToImpression(affiliateUrlId, appVersionId, widgetId, userId, location, type){
  if (validate_addCart()!=false){
    var campaignId = $('searchCampaignId').value;
    var perThousand = $("pricePerThousand").value;
    var totalImp = $("noOfImpression").value;
		
		var originalPrice = $("originalPricePerThousand").value;
		var originalNoImp = $("originalnoOfImpression").value;
		var widgetType = $("widgetType").value;
		
		if (originalPrice<perThousand){
			var showStatus = function(msgString){
				// refresh list of top publishers after bid is added to campaign_publisher table
				//retrieveTopPublishers(affiliateUrlId,campaignId, 0, userId, 0);
				
				var text2 ="";
				var showStatus2 = function(msgString2){
					if (msgString2.length>0){
						text2 += msgString2;
					}
					$("topPub").innerHTML = text2;
				}
				CampaignPublisher.findTopPublishers(affiliateUrlId, widgetId, campaignId, 0, userId, location, 0, {callback:showStatus2, errorHandler:error});

				$("cartReminder1").innerHTML = "<span style='padding:5px;font-size:14px' class='warning' align=center><img src='images/ok.png'> Added to cart<br><input type='button' name='action' id='action-button-small' class='dev_sprite action-button-small' onclick='window.location.href=\"campaign_payment.jsp\"' value='Proceed to payment' title='Proceed to payment'></span>";
			}
			CampaignPublisher.saveAds(perThousand, campaignId, appVersionId, affiliateUrlId, widgetId, widgetType, totalImp, userId, type, {callback:showStatus, errorHandler:error});
		}else{
			$("cartReminder1").innerHTML = "<span style='padding:5px;font-size:14px' class='warning' align=center>New bid price must be more than previous bid price ($ "+perThousand+")</span>";
		}
  }
}
*/

/*
aiwei : get top publishers and show it layer in campaign_choose.jsp
 */
function retrieveTopPublishers(affiliateUrlId, campaignId, campaignPublisherId, userId, location, pageNo){
  var text ="";
  var showStatus = function(msgString){
    if (msgString.length>0){
      text += msgString;
    }
    $("topPub").innerHTML = text;
  }
  CampaignPublisher.findTopPublishers(affiliateUrlId, campaignId, campaignPublisherId, userId, location, pageNo, {callback:showStatus, errorHandler:error});
}

/*
aiwei : generate layer to show publisher details in campaign_choose.jsp
 */
/*
function generateDevLayer(domainRatingId, affiliateUrlId, widgetId, appVersionId, campaignId){
	var text = "";
	$("layerShow").innerHTML = "";
	var showStatus = function(msgString){
		text += "<div width='100%' align=left><a href='javascript:void(0)' onclick='AppearLayer(\"layerShow\", 0.5);'> &laquo; back</a></div>";
		if (msgString.length>0){
			text += msgString[0]['publisherDetails'];
		}
		$("layerShow").innerHTML = text;
		
		if ($("totBalance")!=null){
			$("noOfImpression").value=($("totBalance").innerHTML/1000);
		}
	}
	var userId = $("userId").value;
	AppearLayer('layerShow', 0.5);
	var type = "addView";
	AffiliateUrl.retrievePublisher(affiliateUrlId, widgetId, appVersionId, domainRatingId, campaignId, userId, type, {callback:showStatus, errorHandler:error});
	
}
 */
/*
Generate layer for existing publisher, just to view, not allowed to update
 */
/*
function generateExistDevLayer(domainRatingId, affiliateUrlId, widgetId, appVersionId, campaignId){
	var text = "";
	$("layerShow").innerHTML = "";
	var showStatus = function(msgString){
		text += "<div width='100%' align=left><a href='javascript:void(0)' onclick='AppearLayer(\"layerShow\", 0.5);'> &laquo; back</a></div>";
		if (msgString.length>0){
			text += msgString[0]['publisherDetails'];
		}
		$("layerShow").innerHTML = text;
		
		if ($("totBalance")!=null){
			$("noOfImpression").value=($("totBalance").innerHTML);
		}
		
	}
	var userId = $("userId").value;
	AppearLayer('layerShow', 0.5);
	var type ="addNew";
	AffiliateUrl.retrievePublisher(affiliateUrlId, widgetId, appVersionId, domainRatingId, campaignId, userId, type, {callback:showStatus, errorHandler:error});
}
 */

/*
Aiwei 
- get camp advertisment title/body and populate to text box in camapign_design.jsp
 */

function getCampAdsDetails(){
	var adId = document.getElementById("adId").value;
  var campaignAdvertisementId = adId;
  if (campaignAdvertisementId>0){
    var showStatus = function(msgString){
      document.getElementById("adName").value=msgString[0]['name']+" - Copy";
      document.getElementById("adTitle").value=msgString[0]['title'];
      document.getElementById("adBody").value=msgString[0]['body'];
			document.getElementById("adBody2").value=msgString[0]['premiumExtraChar'];
			document.getElementById("adTitleBuffer").innerHTML=msgString[0]['title'];
			document.getElementById("adBodyBuffer").innerHTML=msgString[0]['body'];
			document.getElementById("adBody2Buffer").innerHTML=msgString[0]['premiumExtraChar'];
	updateAllChrLeft();
    }
    CampaignAdvertisement.findDetails(campaignAdvertisementId, {callback:showStatus, errorHandler:error});
  }else{
    document.getElementById("adName").value="";
    document.getElementById("adTitle").value="";
    document.getElementById("adBody").value="";
		document.getElementById("adBody2").value="";
    //liveView("adsTitle","adsShowTitle");
   // liveView("adBody","adsShowDesc");
  }
}


/* to confirm start/stop ad before it's updated to db */
/*function confirmStartStop(status, id, total, campAdsId, campId) {
  if (status == "Stopped"){
    message = "Stop ad?";
  }else{
    message = "Start this ad, the rest will be stopped. Confirmed?";
  }
  if (confirm(message)){
    //startStopAd(status, c, total, campAdsId, campId);
		var showStatus = function(msgString){
			for (var c=0;c<total;c++){
				// if start ad, the rest of the ad has to be stopped.
				// if stop ad, no action taken to the rest of the ads
				if (status=="Started"){
					if (c==id){
						document.getElementById("runningStatus_"+c).innerHTML = "<div class=\"d_label_large left\">Started</div><a class=\"dev_sprite on-button\" href='javascript:void(0)' onclick='confirmStartStop(\"Stopped\", "+c+", "+total+", "+campAdsId+", "+campId+")'>Pause this ad</a>"; 
						
					}else{
						document.getElementById("runningStatus_"+c).innerHTML = "<div class=\"d_label_large left\">Paused</div><a href='javascript:void(0)' class=\"dev_sprite off-button\" onclick='confirmStartStop(\"Started\", "+c+", "+total+", "+campAdsId+", "+campId+")'>Start this ad</a>"; 
					}
				}else{
					if (c==id){
						document.getElementById("runningStatus_"+c).innerHTML = "<div class=\"d_label_large left\">Paused</div><a href='javascript:void(0)' class=\"dev_sprite off-button\" onclick='confirmStartStop(\"Started\", "+c+", "+total+", "+campAdsId+", "+campId+")'>Start this ad</a>";
					}
				}
			}
		}
		CampaignAdvertisement.startStopRunningStatus(campAdsId, campId, status, {callback:showStatus, errorHandler:error});
  }
  return;
}
*/
/*
	Aiwei: start/stop the ad
 */
/*function startStopAd(status, id, total,campAdsId, campId){
  var showStatus = function(msgString){
    for (var c=0;c<total;c++){
      // if start ad, the rest of the ad has to be stopped.
      // if stop ad, no action taken to the rest of the ads
      if (status=="Started"){
        if (c==id){
          document.getElementById("runningStatus_"+c).innerHTML = "<div class=\"d_label_large left\">Started</div> <a class=\"dev_sprite on-button\" href='javascript:void(0)' onclick='confirmStartStop(\"Stopped\", "+c+", "+total+", "+campAdsId+", "+campId+")'>Pause this ad</a>";
        }else{
          document.getElementById("runningStatus_"+c).innerHTML = "<div class=\"d_label_large left\">Paused</div> <a class=\"dev_sprite off-button\" href='javascript:void(0)' onclick='confirmStartStop(\"Started\", "+c+", "+total+", "+campAdsId+", "+campId+")'>Start this ad</a>";
        }
      }else{
        if (c==id){
          document.getElementById("runningStatus_"+c).innerHTML = "<div class=\"d_label_large left\">Paused</div> <a class=\"dev_sprite off-button\" href='javascript:void(0)' onclick='confirmStartStop(\"Started\", "+c+", "+total+", "+campAdsId+", "+campId+")'>Start this ad</a>";
        }
      }
    }
  }
  CampaignAdvertisement.startStopRunningStatus(campAdsId, campId, status, {callback:showStatus, errorHandler:error});
}
*/

/* to confirm start/stop ad before it's updated to db */
/*function confirmPublisherStartStop(status, campaignPublisherId) {
  if (status == "Stopped"){
    message = "Stop ad?";
  }else{
    message = "Start this ad?";
  }
  if (confirm(message)){
    //startStopPublisherAd(status, campId);
		var showStatus = function(msgString){
			if (status=="Started"){
				document.getElementById("publisherRunningStatus_"+campaignPublisherId).innerHTML = "Started <img src='images/start.png' style='vertical-align:middle'> <br><a href='javascript:void(0)' onclick='confirmPublisherStartStop(\"Stopped\", "+campaignPublisherId+")'>Pause this publisher</a>";
			}else{
				document.getElementById("publisherRunningStatus_"+campaignPublisherId).innerHTML = "Paused <img src='images/stop.png' style='vertical-align:middle'> <br><a href='javascript:void(0)' onclick='confirmPublisherStartStop(\"Started\",  "+campaignPublisherId+")'>Start this publisher</a>";
			}
		}
		CampaignPublisher.startStopRunningStatus(campaignPublisherId, status, {callback:showStatus, errorHandler:error});
  }
  return;
}
*/
function confirmCampaignRemove(campaignId) {
  var message = "Confirm remove this campaign?";
  if (confirm(message)){
		var showStatus = function(msgString){
			//document.getElementById("campaignRunningStatus_"+campaignId).innerHTML = "Deleted";
			self.location.href = "campaign.jsp?message=removed";
		}
		Campaign.removeCampaign(campaignId, {callback:showStatus, errorHandler:error});
  }
  return;
}

/*
	Aiwei: start/stop the ad
 */
/*function startStopPublisherAd(status, campaignPublisherId){
  var showStatus = function(msgString){
    if (status=="Started"){
      document.getElementById("publisherRunningStatus_"+campaignPublisherId).innerHTML = "Started <img src='images/start.png' style='vertical-align:middle'> <br><a href='javascript:void(0)' onclick='confirmPublisherStartStop(\"Stopped\", "+campaignPublisherId+")'>Pause this publisher</a>";
    }else{
      document.getElementById("publisherRunningStatus_"+campaignPublisherId).innerHTML = "Paused <img src='images/stop.png' style='vertical-align:middle'> <br><a href='javascript:void(0)' onclick='confirmPublisherStartStop(\"Started\",  "+campaignPublisherId+")'>Start this publisher</a>";
    }
  }
  CampaignPublisher.startStopRunningStatus(campaignPublisherId, status, {callback:showStatus, errorHandler:error});
}
*/
/* to get pop up box to enter bid $$ and total impression*/
/*function bidShortCut(affiliateUrlId, widgetId, type){
  if (validate_addCart_shortCut(widgetId)!=false){
    var perThousand = $('popUpPerThousand_'+widgetId).value;
    var totalImp = $('popUpImpressions_'+widgetId).value;
    var campaignId = $('searchCampaignId').value;
    var appVersionId = $('searchAppVersionId').value;
    var userId = $('userId').value;
		var widgetType = $('widgetType_'+widgetId).value;
		
		var originalPrice = $('originalPricePerThousand_'+widgetId).value;
		
		if (perThousand>0 && totalImp>0){
			if ((perThousand*totalImp)<originalPrice && originalPrice>0){
				document.getElementById("bidError_"+widgetId).innerHTML = "<div style='float:left;'>Please enter a new price or impression. New bid price has to be more than the previous bid price</div>";
			}else{
				var showStatus = function(msgString){
					$('myPerThousandPrice_'+widgetId).value = perThousand;
					$('myTotalImpression_'+widgetId).value = totalImp;
					$('totalPrice_'+widgetId).innerHTML = "$ "+(Math.floor((totalImp*perThousand)*100)/100).toFixed(2);
					showLayer("paymentBox");
					AppearLayer('showBidLayer_'+widgetId, 0.5);
					document.getElementById("bidError_"+widgetId).innerHTML = "";
					clearBox(widgetId);
				}
				document.getElementById("bidError_"+widgetId).innerHTML = "<div style='float:left;'><img src='images/loading.gif'/></div><div style='float:left;padding-left:5px;'> Saving...please wait</div>";
				CampaignPublisher.saveAds(perThousand, campaignId, appVersionId, affiliateUrlId, widgetId, widgetType, totalImp, userId, type, {callback:showStatus, errorHandler:error});
			}
		}else{
			if (isEmpty(perThousand) || perThousand==0){
				document.getElementById('popUpPerThousand_'+widgetId).innerHTML = "Price must be more than 0";
				return false;
			}
			if (isEmpty(totalImp) || totalImp==0){
				document.getElementById("popUpImpressions_"+widgetId).innerHTML = "Impression must be more than 0";
				return false;
			}
		}
  }
}
*/

/*
function extendPublisher(tableId, affiliateUrlId, startDate, endDate, location, limited){
  var limit = document.getElementById("existingLimit").value;
  var toLimit = limit*1;
  var limit2 = limited*1;
  toLimit += limit2;
	
  var showStatus = function(msgString){
    var myTable = document.getElementById(tableId);
    var tBody = myTable.getElementsByTagName('tbody')[0];
    for (var i=0;i<msgString.length;i++){
      var result = msgString[i];
      var newTR = document.createElement('tr');
      var newTD = document.createElement('td');
      newTD.innerHTML = result.name;
      newTR.appendChild (newTD);
			
      var newTD2 = document.createElement('td');
      newTD2.innerHTML = result.name;
      newTR.appendChild (newTD2);
			
      var newTD3 = document.createElement('td');
      newTD3.innerHTML = result.name;
      newTR.appendChild (newTD3);
			
      var newTD4 = document.createElement('td');
      newTD4.innerHTML = result.name;
      newTR.appendChild (newTD4);
			
      var newTD5 = document.createElement('td');
      newTD5.innerHTML = result.name;
      newTR.appendChild (newTD5);
			
      var newTD6 = document.createElement('td');
      newTD6.innerHTML = result.name;
      newTR.appendChild (newTD6);
			
      var newTD7 = document.createElement('td');
      newTD7.innerHTML = result.name;
      newTR.appendChild (newTD7);
			
      tBody.appendChild(newTR);
    }		
    document.getElementById("existingLimit").value = toLimit;
  }
  DomainRating.findTopDomain(affiliateUrlId, startDate, endDate, location, limit, toLimit, {callback:showStatus, errorHandler:error});
} 
*/
/* Aiwei : in publisher's widget, save the user data if he clicks on the ads  */
function saveOnClick(campaignPublisherId, userIp, widgetId, pageNo, appsId, appsVersionId, referredUrl, platformId, categoryId, isIphone, searchYes, siteOpen){

	var showStatus = function(msgString) {
		
		/*
		*   Edited by jim:
		*
		*   Disabled following code as not needed anymore.
		*   Please do not reuse.
		*
		if (isIphone == "Yes"){
			var showStatusUrl2 = function(msgString3){
				window.open(msgString3[0].url);
			}
			AppsVersion.findByAppsVerId(appsVersionId, {callback:showStatusUrl2, errorHandler: error});
		}
		*/
    };
    //var error = function(msg){alert(msg);}
    var type = "ads";
    ImpressionLog.saveLog2(campaignPublisherId, userIp, widgetId, type, pageNo, referredUrl, appsVersionId, {callback:showStatus, errorHandler: error});
		
}

/* Aiwei : in publisher's widget, save the user data if he clicks on mobile apps logo */
/* Aiwei : in publisher's widget, track "firstclick"  */
function saveOnFirstClick(campaignPublisherId, userIp, widgetId, pageNo, appsId, appsVersionId, referredUrl, platformId, categoryId, isIphone, searchYes, siteOpen){

	var showStatus = function(msgString) {
		
		/*
		*   Edited by jim:
		*
		*   Disabled following code as not needed anymore.
		*   Please do not reuse.
		*
		if (isIphone == "Yes"){
			var showStatusUrl2 = function(msgString3){
				window.open(msgString3[0].url);
			}
			AppsVersion.findByAppsVerId(appsVersionId, {callback:showStatusUrl2, errorHandler: error});
		}
		*/
    };
    //var error = function(msg){alert(msg);}
    var type = "firstclick";
    ImpressionLog.saveLog2(campaignPublisherId, userIp, widgetId, type, pageNo, referredUrl, appsVersionId, {callback:showStatus, errorHandler: error});
		
}

/* Aiwei : in publisher's widget, track "firstclick"  */

function saveMobileLogo(widgetId, userIp, pageNo, referredUrl){
	var campaignPublisherId = 0;
  var showStatus = function(msgString) {
   // window.open("index.jsp?linkWidget="+widgetId+","+campaignPublisherId+","+userIp+","+pageNo+"&referredUrl="+referredUrl);
  };
  var type = "mobilelogo";
	
  ImpressionLog.saveLog(campaignPublisherId, userIp, widgetId, type, pageNo, referredUrl, {callback:showStatus, errorHandler: error});
}

/* Aiwei : in publisher's widget, save the user data if clicks on the page number  */
function savePagination(widgetId, userIp, pageNo, referredUrl){
  var campaignPublisherId = 0;
  var showStatus = function(msgString) {
    //self.location.href = url+"&linkWidget="+widgetId+","+campaignPublisherId+","+userIp+","+pageNo+"&referredUrl="+referredUrl;
    return true;
  };
  var type = "pagination";
  ImpressionLog.saveLog(campaignPublisherId, userIp, widgetId, type, pageNo, referredUrl, {callback:showStatus, errorHandler: error});
	
}


function saveOnload(widgetId, campaignPublisherId, userIp, pageNo, referredUrl, searchYes, appsVersionId){
    //if (campaignPublisherId>0){
        var type="";
        if (searchYes==0){
            type = "load";
        }else{
            type = "search";
        }
        var showStatus = function(msgString){
        }
        // save the impression load into impression_log table
        ImpressionLog.saveLog2(campaignPublisherId, userIp, widgetId, type, pageNo, referredUrl, appsVersionId, {callback:showStatus, errorHandler: error});
    //}
}
/*
function findOverviewImpression(userId){
  var startDate = document.getElementById("startDate").value;
  var endDate = document.getElementById("endDate").value;
  var impStatus = document.getElementById("impStatus").value;
  var showStatus = function(msgString){
    var text = "";
		text += "<div style='padding-top:15px'><h2>View Impressions for "+impStatus+" Ads</h2></div>";
    text += "<table width='100%' class='lightBorder' cellpadding=7>";
    text += "<tr class='tableHeader bold'><td>Ads Name</td><td>Total Price(US$)</td><td>Total Impressions</td><td>Per 1000 Clicks (US$)</td><td>Impressions Viewed</td><td>Balance Impression</td><td width='1%'></td></tr>";
    var totalBought = 0;
    var totalViewed = 0;
    var totalBalance = 0;
    if (msgString.length>0){
      for (var p=0;p<msgString.length;p++){
        var result = msgString[p];
				var cls = "";
				if(p%2 == 0)
					cls = "background-color:#f3f3f3;";
				else
					cls = "";
				text += "<tr valign=top style='"+cls+"'><td> "+result.name+" ("+result.affiliateUrl+")<br><b>App</b> : <a href='application_detail.jsp?appsId="+result.appId+"&appsVerId="+result.appVersionId+"'>"+result.appsName+"</a>";
				if (!isEmpty(result.scheduleStop)){
					text += "<br><span class='warning'>Expired : "+result.scheduleStop+"</span>";
				}
				
				text +="</td><td align=right>$ "+(Math.floor(result.price*100)/100).toFixed(2)+"</td><td align=right>"+result.totalImpression+"</td><td align=right>$ "+(Math.floor(result.perThousandPrice*100)/100).toFixed(2)+"</td><td align=right>"+(result.totalImpression-result.totalBalance)+"</td><td align=right>"+result.totalBalance+"</td><td><a href='ads_impression_details.jsp?campaignId="+result.campaignId+"&campaignPublisherId="+result.id+"&startDate="+startDate+"&endDate="+endDate+"'>Details</a></td></tr>";
        totalBought += result.totalImpression;
        totalViewed += (result.totalImpression-result.totalBalance);
        totalBalance += result.totalBalance;
      }
			
    }else{
      text += "<tr><td align=center colspan=7>No records found.</td></tr>";
    }
    text += "<tr class='bold' align=right><td colspan=3>Total Impressions</td><td>"+totalBought+"</td><td>"+totalViewed+"</td><td>"+totalBalance+"</td><td></td></tr>";
    text += "</table>";
		document.getElementById("impressionReportError").innerHTML = "";
    document.getElementById("loadResultOverview").innerHTML = text;
  }
	document.getElementById("impressionReportError").innerHTML = "<div style='float:left;'><img src='images/loading.gif'/></div><div style='float:left;padding-left:5px;'> loading...</div><br>";
	
  CampaignPublisher.findOverview(userId, startDate, endDate, impStatus, {callback:showStatus, errorHandler:error});
}
*/
/*function findImpression(userId){
	
  var startDate = document.getElementById("startDate").value;
  var endDate = document.getElementById("endDate").value;
  var showStatus = function(msgString){
    var text = "";
		
		//text += "<div style='padding-top:15px'><h2>View Clicked Impressions</h2></div>";
    text += "<table width='100%' class='lightBorder' cellpadding=7>";
    text += "<tr class='tableHeader bold'><td>Ads Name</td><td>Price(US$)</td><td>Per 1000 Clicks (US$)</td><td>Total Impressions</td><td>Impressions Viewed</td><td>Balance Impression</td><td>Impressions Clicked</td><td width='1%'></td></tr>";
    var totalBought = 0;
    var totalViewed = 0;
    var totalBalance = 0;
    var totalClicked = 0;
    if (msgString.length>0){
      for (var x=0;x<msgString.length;x++){
        var result = msgString[x];
        //text += "<tr><td>"+result.name+"</td><td><a href='application_details.jsp?appsId="+result.appsId+"&appsVersionId="+result.appsVersionId+"'>View App</a></td><td align=center>"+result.totalClicked+"</td><td><a href='ads_clicked_details.jsp?impressionPriceId="+result.id+"&startDate="+startDate+"&endDate="+endDate+"'>Details</a></td></tr>";
				
        if(x%2 == 0)
					cls = "background-color:#f3f3f3;";
				else
					cls = "";
				text += "<tr valign=top style='"+cls+"'><td>"+result.name+"<br><b>App</b> : <a href='application_detail.jsp?appsId="+result.appId+"&appsVersionId="+result.appVersionId+"'>"+result.appsName+"</a></td><td align=center>"+result.price+"</td><td align=center>"+result.perThousandPrice+"</td><td align=center>"+result.totalImpression+"</td><td align=center>"+(result.totalImpression-result.totalBalance)+"</td><td align=center>"+result.totalBalance+"</td><td align=center>"+result.totalClicked+"</td><td><a href='ads_clicked_details.jsp?campaignPublisherId="+result.id+"&campaignId="+result.campaignId+"&startDate="+startDate+"&endDate="+endDate+"'>Details</a></td></tr>";
        totalBought += result.totalImpression;
        totalViewed += (result.totalImpression-result.totalBalance);
        totalBalance += result.totalBalance;
        totalClicked += result.totalClicked;
      }
    }else{
      text += "<tr><td align=center colspan=4>No records found.</td></tr>";
    }
    text += "<tr class='bold' align=center><td colspan=3 align=right>Total Impressions</td><td>"+totalBought+"</td><td>"+totalViewed+"</td><td>"+totalBalance+"</td><td>"+totalClicked+"</td><td></td></tr>";
    text += "</table>";
    document.getElementById("impressionReportError").innerHTML = "";
		document.getElementById("loadResult").innerHTML = text;
  }
	document.getElementById("impressionReportError").innerHTML = "<div style='float:left;'><img src='images/loading.gif'/></div><div style='float:left;padding-left:5px;'> loading...</div><br>";
  CampaignPublisher.findImpLogByType(userId, startDate, endDate, {callback:showStatus, errorHandler:error});
}
*/

// publisher's dashboard to check earning for a date range
function checkEarningDateRange(startDate, endDate, widgetList, type){
  var start = document.getElementById(startDate).value;
  var end = document.getElementById(endDate).value;
  if (start > end) {
    alert("Start date cannot be later than end date");
    document.getElementById(endDate).value = start;
    return false;
  }else{
    document.getElementById("rangeReport").innerHTML ="";
    var showStatus = function(msgString){
      var text = "";
      if (msgString.length>0){
        for (var p=0;p<msgString.length;p++){
          var result = msgString[p];
					var earned = (result.totalEarned*0.62);
          //text += "<div style='width:70%;float:left'>Date Range "+result.startDate+" - "+result.endDate+" </div><div style='width:30%;float:left'>: <a href='download_trend.jsp?startDate="+start+"&endDate="+end+"'>"+result.totalEarned+"</a></div>";
					text += "<div style='width:70%;float:left'>Date Range "+result.startDate+" - "+result.endDate+" </div><div style='width:30%;float:left'>: "+(Math.floor(earned*100)/100).toFixed(2)+"</div>";
        }
      }
      document.getElementById("rangeReport").innerHTML = text;
    }
		var location = "WW";
    ViewDailyImpressionStats.findEarningDateRange(widgetList, start, end, type, location, {callback:showStatus, errorHandler:error});
  }
}

function findMatchingApps(keywords, affiliateUrlId){
	var myKeywords = document.getElementById(keywords).value;
	var myAffiliateUrlId = document.getElementById(affiliateUrlId).value;
	var showStatus = function(msgString){
		var text = "";
		text += "<div><font class='title3'>List of apps that matched keywords entered</font></div>";
		text += "<table width='100%' border='0' cellspacing='0' cellpadding='10'>";
		text += "<tr class='bold'><td width='25%'>App Name</td><td width='55%'>Description</td><td width='20%'>Category</td></tr>";
		if (msgString.length){
			for (var i=0;i<msgString.length;i++){
				result = msgString[i];
				var description = result.description;
				if (result.description.length > 150){
					description = result.description.substring(0,150)+"...";
				}
				text += "<tr valign=top><td>"+result.name+"</td><td>"+description+"</td><td>"+result.category+"</td></tr>";
			}
		}else{
			text += "<tr><td colspan=3 align=center>No records found</td></tr>";
			if (isEmpty(myKeywords)){
				text += "<tr><td colspan=3 align=center class='bold warning'>(Keyword is not entered)</td></tr>";
			}
		}
		text += "</table>";
		document.getElementById("messageLocation").innerHTML = text;
    document.getElementById("keywordsError").innerHTML = "";
    document.getElementById("searchApps").innerHTML = "<a href='javascript:void(0)' onclick='findMatchingApps(\"keywords\", \"affiliateUrlId\");'><img src='images/action_check_avail.jpg' border='0'></a>";
		document.getElementById("popupMessage").style.top = "400px";
		showLayer("popupMessage");
	}
  document.getElementById("searchApps").innerHTML = "<img src='images/action_check_avail.jpg' border='0'>";
  document.getElementById("keywordsError").innerHTML = "<div style='float:left;'><img src='images/loading.gif'/></div><div style='float:left;padding-left:5px;'> searching...</div>";
	Apps.findByKeywordsAjax(encodeURI(myKeywords), myAffiliateUrlId, {callback:showStatus, errorHandler:error});
}

function convertCurrency(fromCurrency, toCurrency, fromId, toId){
	var showStatus = function (msgString){
		if (msgString.length>0){
			if (fromId == "price" && toId == "yen"){
				var rate = ((document.getElementById(fromId).value*(msgString[0]['rate']/msgString[0]['unit']))*(105/100));
				document.getElementById(toId).value = (Math.floor(rate*100)/100).toFixed(0);
			}else{
				var rate = ((document.getElementById(fromId).value*msgString[0]['unit'])/msgString[0]['rate']);
				document.getElementById(toId).value = (Math.floor(rate*100)/100).toFixed(2);
			}
			
		}
	}
	Currency.convertCurrency(fromCurrency, toCurrency, {callback:showStatus, errorHandler:error});
}

/*function loadDevReports(startDate, endDate, userId, location, dateShow){

	var start = startDate;
	var end = endDate;
	if (startDate == "startDate" && endDate == "endDate"){
		start = document.getElementById(startDate).value;
		end = document.getElementById(endDate).value;
	}
	
	if (start > end) {
		alert("Start date cannot be later than end date");
		document.getElementById(endDate).value = start;
		return false;
	}else{
		document.getElementById("rangeReport").innerHTML ="";
		var showStatus = function(msgString){
			var text = "";
			text += "<table width='100%' class='lightBorder' cellpadding=7>";
			text += "<tr class='tableHeader bold'><td>Campaign Name</td><td>Status</td><td>Start/End Date</td><td>Avg CTR</td><td>Impressions</td><td>Spent</td></tr>";
			if (msgString.length>0){
				for (var p=0;p<msgString.length;p++){
					var result = msgString[p];
					if(p%2 == 0)
						cls = "background-color:#f3f3f3;";
					else
						cls = "";
						
					text += "<tr style='"+cls+"'>";
					text += "<td><a href='campaign_publisher_report.jsp?campaignId="+result.campId+"'>"+result.campName+"</a><br>Daily Budget "+result.campDailyBudget+" </td>";
					if (result.runningStatus == "Started"){
						text += "<td>Active</td>";
					}else{
						text += "<td>Stopped</td>";
					}
					text += "<td>"+result.campScheduleStart+" - "+result.campScheduleStop+"</td>";
					text += "<td align=right>"+result.avgCTR+" %</td>";
					text += "<td align=right>"+result.totalImpression+"</td>";
					text += "<td align=right>"+result.totalSpent+"</td>";
					text += "</tr>";
					if (isEmpty(dateShow)){
						dateShow = result.selectStart+" - "+result.selectEnd;
					}
				}
			}else{
				if (isEmpty(dateShow)){
					dateShow = start+" - "+end;
				}
				text += "<tr><td colspan=6 align=center>No records found.</td></tr>";
			}
			text += "</table>";
			
			document.getElementById("dateSpace").innerHTML = "("+dateShow+")";
			document.getElementById("rangeReport").innerHTML = text;
		}
		document.getElementById("rangeReport").innerHTML = "<div style='float:center;'><img src='images/loading.gif'/></div><div style='float:left;padding-left:5px;'> loading...</div>";
		CampaignPublisher.findDevReportsByDateRange(start, end, userId, location, {callback:showStatus, errorHandler:error});
		
	}
}
*/

/*
function loadDevPublisherReports(campaignId, startDate, endDate, userId, location, dateShow){

	var start = startDate;
	var end = endDate;
	if (startDate == "startDate" && endDate == "endDate"){
		start = document.getElementById(startDate).value;
		end = document.getElementById(endDate).value;
	}
	
	if (start > end) {
		alert("Start date cannot be later than end date");
		document.getElementById(endDate).value = start;
		return false;
	}else{
		document.getElementById("rangeReport").innerHTML ="";
		var showStatus = function(msgString){
			var text = "";
			text += "<table width='100%' class='lightBorder' cellpadding=7>";
			text += "<tr class='tableHeader bold'><td>Widget Name</td><td>Status</td><td>Avg CPM Bid</td><td>Avg CTR</td><td>Impressions Bought</td><td>Impressions Served</td><td>Spent</td></tr>";
			if (msgString.length>0){
				for (var p=0;p<msgString.length;p++){
					var result = msgString[p];
					if(p%2 == 0)
						cls = "background-color:#f3f3f3;";
					else
						cls = "";
						
					text += "<tr style='"+cls+"'>";
					text += "<td>"+result.widgetName+"<br><a href='http://"+result.affiliateUrl+"' target='_blank'>Website</a></td>";
					if (result.runningStatus == "Started"){
						text += "<td>Active</td>";
					}else{
						text += "<td>Stopped</td>";
					}
					text += "<td align=right>"+result.avgCPM+" %</td>";
					text += "<td align=right>"+result.avgCTR+" %</td>";
					text += "<td align=right>"+result.totalImpression+"</td>";
					text += "<td align=right>"+result.impressionServed+"</td>";
					text += "<td align=right>"+result.totalSpent+"</td>";
					text += "</tr>";
					if (isEmpty(dateShow)){
						dateShow = result.selectStart+" - "+result.selectEnd;
					}
					
				}
			}else{
				if (isEmpty(dateShow)){
					dateShow = start+" - "+end;
				}
				text += "<tr><td colspan=7 align=center>No records found.</td></tr>";
			}
			text += "</table>";
			
			document.getElementById("dateSpace").innerHTML = "("+dateShow+")";
			document.getElementById("rangeReport").innerHTML = text;
			
		}
		document.getElementById("rangeReport").innerHTML = "<div style='float:center;'><img src='images/loading.gif'/></div><div style='float:left;padding-left:5px;'> loading...</div>";
		CampaignPublisher.findDevPublisherReportsByDateRange(campaignId, start, end, userId, location, {callback:showStatus, errorHandler:error});
		
	}
}
*/

function loadPubEarningReports(startDate, endDate, userId, location, dateShow){

	var start = startDate;
	var end = endDate;
	if (startDate == "startDate" && endDate == "endDate"){
		start = document.getElementById(startDate).value;
		end = document.getElementById(endDate).value;
	}
	
	if (start > end) {
		alert("Start date cannot be later than end date");
		document.getElementById(endDate).value = start;
		return false;
	}else{
		document.getElementById("pubReport").innerHTML ="";
		var showStatus = function(msgString){
			var text = "";
			text += "<table width='100%' class='lightBorder' cellpadding=7>";
			text += "<tr class='bold t_header'><td>Widget Name</td><td>Total Imp Served</td><td>No of Paid Advertisers</td><td>Avg CPC</td><td>Estimated Earning</td></tr>";
			if (msgString.length>0){
				for (var p=0;p<msgString.length;p++){
					var result = msgString[p];
					if(p%2 == 0)
						cls = "background-color:#f3f3f3;";
					else
						cls = "";
						
					text += "<tr style='"+cls+"'>";
					text += "<td><a href='publisher_reporting.jsp?widgetId="+result.widgetId+"'>"+result.widgetName+"</a></td>";
					text += "<td align=right>"+result.impressionServed+"</td>";
					text += "<td align=right>"+result.totalPublishers+"</td>";
					text += "<td align=right>"+result.avgCPC+"</td>";
					text += "<td align=right>"+result.totalEarned+"</td>";
					text += "</tr>";
					if (isEmpty(dateShow)){
						dateShow = result.selectStart+" - "+result.selectEnd;
					}
				}
			}else{
				if (isEmpty(dateShow)){
					dateShow = start+" - "+end;
				}
				text += "<tr><td colspan=5 align=center>No records found.</td></tr>";
			}
			text += "</table>";
			
			document.getElementById("dateSpace").innerHTML = "("+dateShow+")";
			document.getElementById("pubReport").innerHTML = text;
			
		}
		document.getElementById("pubReport").innerHTML = "<div style='float:center;'><img src='images/loading.gif'/></div><div style='float:left;padding-left:5px;'> loading...</div>";
		Widget.findPublisherEarningByDateRange(start, end, userId, location, {callback:showStatus, errorHandler:error});
		
	}
}

// add publisher to campaign_publisher table
/*function ajaxAddPublisher(campaignId, widgetId, bidPrice, userId){
	var ads = document.getElementById("adsId");
	if (ads == null){
		adsId = 0;
	}else{
		adsId = ads.value;
	}
	var showStatus = function(msgString){
	}
	CampaignPublisher.savePublisher(campaignId, widgetId, bidPrice, userId, adsId, {callback:showStatus, errorHandler:error});
}
*/

// remove publisher from campaign_publisher table
function ajaxRemovePublisher(campaignId, widgetId, userId){
	var ads = document.getElementById("adsId");
	if (ads == null){
		adsId = 0;
	}else{
		adsId = ads.value;
	}
	var showStatus = function(msgString){
	}
	CampaignPublisher.removePublisher(campaignId, widgetId, userId, adsId, {callback:showStatus, errorHandler:error});
}

// start/stop publisher running_status
function confirmPublisherStartStop(status, adId, campaignPublisherId) {
	var campaignId = document.getElementById("campaignId").value;
  if (status == "Paused"){
    message = "Pause ad?";
  }else{
    message = "Start this ad?";
  }
  if (confirm(message)){
    //startStopPublisherAd(status, campId);
		var showStatus = function(msgString){
			if (status=="Started"){
				document.getElementById("pubRunningStatus_"+adId+"_"+campaignPublisherId).innerHTML = "<a href='javascript:void(0)' onclick='confirmPublisherStartStop(\"Paused\", "+adId+", "+campaignPublisherId+")'>Started</a>";
			}else{
				document.getElementById("pubRunningStatus_"+adId+"_"+campaignPublisherId).innerHTML = "<a href='javascript:void(0)' onclick='confirmPublisherStartStop(\"Started\", "+adId+", "+campaignPublisherId+")'>Paused</a>";
			}
		}
		CampaignPublisher.startStopRunningStatus(campaignPublisherId, status, campaignId, {callback:showStatus, errorHandler:error});
  }
  return;
}

function showBlockLink(appsVerId){
  document.getElementById("linkBlock").style.display = "block";
  document.getElementById("fileBlock").style.display = "none";
  var showStatus = function(msgString){
  }
  AppsVersion.updateEmptyUrl(appsVerId, {callback:showStatus, errorHandler:error});
}

function showBlockFile(appsVerId){
  document.getElementById("fileBlock").style.display = "block";
  document.getElementById("linkBlock").style.display = "none";
  document.getElementById("iTuneStatus").innerHTML = "";
  document.getElementById("iTunesLinkStatus").innerHTML = "";

  var showStatus = function(msgString){
  }
  AppsVersion.updateEmptyUrl(appsVerId, {callback:showStatus, errorHandler:error});
}

function findAppsDetails(id){
	var showStatus = function(msgString){
		if (msgString.length>0){
		  
		  var a = jQuery('#myString');
		  if ( a.length > 0 ){
			var result = msgString[0];
			document.getElementById("platformId").value = result.platformId;
			document.getElementById("appsId").value = result.appsId;
			document.getElementById("myString").value = result.myString;
			document.getElementById("countryCode").value = result.countryCode;
			document.getElementById("adIconBuffer").src = document.getElementById("appImageFolder").value + result.imageUrl;
		  }
		  
		  if (typeof createAdFormAppUpdate === 'function'){
			  createAdFormAppUpdate(msgString[0]);
		  }
		}
	}
	ViewAppsSearch.findAppsDetails(id.value, {callback:showStatus, errorHandler:error});
}

function loadCampaignTable(){
	var campaignId = document.getElementById("campaignId").value;
	var userId = document.getElementById("userId").value;
	var month = document.getElementById("month").value;
	var duration = 0;
	var runningStatus = "'Started', 'Paused', 'Active'";
	var showStatus = function(msgString){
		var html = "<table>";
		//html += "<tr><td>Date</td><td>Total Ad Loads</td><td>Clicks</td><td>CTR</td><td>Total Spent</td></tr>";
		if (msgString.length>0){
			for (var f=0;f<msgString.length;f++){
				var result = msgString[f];
				html += "<tr><td width='150px'>"+result.date+"</td><td width='180px' class='chartTable_header_borders'>"+result.totalAdLoads+"</td><td width='160px' class='chartTable_header_borders'>"+result.totalFirstClicks+"</td><td width='150px' class='chartTable_header_borders'>"+result.totalClickThroughs+"</td><td width='180px' class='chartTable_header_borders'>"+result.firstCtr+"%</td><td width='180px' class='chartTable_header_borders'>"+result.ctr+"%</td><td width='180px' class='chartTable_header_borders'>$"+result.totalSpent+"</td></tr>";
			}
		}else{
			html += "<tr><td colspan=7 align=center>No records found.</td></tr>";
		}
		html += "</table>";
		document.getElementById("chartTable").innerHTML = html;
	}
	CampaignPublisher.findSpendingData(campaignId, userId, runningStatus, month, duration, 0, {callback:showStatus, errorHandler:error});
}


function payNow(userId, accountType, campaignId, amount, currency){
	var showStatus = function(){
		document.getElementById("loadingMessage").innerHTML = "";
		window.location.href="campaign_single.jsp?campaignId="+campaignId;
	}
	document.getElementById("loadingMessage").innerHTML = "<div style='float:left;'><img src='images/loading.gif'/></div><div style='float:left;padding-left:5px;'> loading...</div><br>";
	Account.savePayAdsFromAccountDetails(userId, accountType, campaignId, amount, currency, {callback:showStatus, errorHandler:error});
}

/*
function updateAdName(adId, newValue){
	var showStatus = function(msgString){
	}
	CampaignAdvertisement.updateName(adId, newValue, {callback:showStatus, errorHandler:error});
}

function updateAdStatus(adId, campaignId, newValue){
	var showStatus = function(msgString){
	}
	CampaignAdvertisement.updateAdStatus(adId, campaignId, newValue, {callback:showStatus, errorHandler:error});
}
*/

/* temporary commented out for 
campaign chart campaign_single.jsp
function loadCampaignChart(){
	var campaignId = document.getElementById("campaignId").value;
	var userId = document.getElementById("userId").value;
	
	document.getElementById("chart").innerHTML = "";
	document.getElementById("chart").innerHTML = "<img src='/mobileapps/ChartServlet?type=campaign&campaignId="+campaignId+"&userId=" + userId + "'/>";
}
*/

