// ========== REQUEST ====================================================================================================
var SERVER_URL = "http://s2.appotec.com/ha/gift_m/";
var SERVICE_URL = SERVER_URL;
var MAKER_URL = "http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=101193";
var SUPER_URL = "http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=115131";
var IMG_URL = SERVER_URL+"images/";
var PRESENT_IMG_URL = SERVER_URL+"uploads/";
var Request = new Object();
var user;
var userId=null, userThumbnail, userName, userProfile, userAge, userGender;
var ownerName, ownerId, ownerAge, ownerGender;
var friendsData;
var allContent;
var container;
var errorDiv;
var isIE = window.ActiveXObject ? true : false;
var osContainer;
var isPostedOnBulletin=false;
var GENDER_MALE = 0;
var GENDER_FEMALE = 1;

var CONTENT_TYPE_JSON = gadgets.io.ContentType.JSON;
var CONTENT_TYPE_TEXT = gadgets.io.ContentType.TEXT;
var ADMIN_USER = 400519169;

var TOP = "TOP";
var MIDDLE = "MIDDLE";
var BOTTOM = "BOTTOM";

var ADS_DATA = 
{TOP: 95,
 MIDDLE: 95,
 BOTTOM: 95
};

var resizer = opensocial.Container.get();
var totalTakenCount = 10;
var loadingImgStr = '<img src="http://s2.appotec.com/ha/gift_m/images/loading.gif" />';

Request.sendPOST = function(url, data, responseHandler, contentType) {
	var os_params = {};
	os_params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
	os_params[gadgets.io.RequestParameters.CONTENT_TYPE] = contentType;
	os_params[gadgets.io.RequestParameters.POST_DATA] = data;
	//gadgets.io.encodeValues(data) data should be object not astring
	gadgets.io.makeRequest(url, responseHandler, os_params);
}
Request.sendGET = function(url, responseHandler, contentType, refresh) {
	var os_params = {};
	os_params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET;
	os_params[gadgets.io.RequestParameters.CONTENT_TYPE] = contentType;
	var callback = function(response){
		if (typeof refresh == "undefined" || refresh == true){
			refreshIframes();
		}
		responseHandler(response);
	}
	gadgets.io.makeRequest(url, callback, os_params);
}
var selectedTab = "";
var selectTab = function(tabName){
	var tabDivs = $("tabContainer").getElementsByTagName("td");	
	for (var i=0;i<tabDivs.length;i++){
		if (tabDivs[i].getAttribute("name") == tabName){
			tabDivs[i].className = "selected";
		}else{
			tabDivs[i].className = "";
		}
	}
	selectedTab = tabName;
	try{
		$("top_banner").style.display = "";
		$("bottom_banner").style.display = "";
	}catch(e){
		;
	}
}
var showLoading = function(){
	container.innerHTML = "<div class=loading>Loading...</div>";
	showError("");
}
var $ = function(id){
	return document.getElementById(id);
}

var roundToDecimals = function(v, decimals, noCommas) { 
     if (decimals == null)
         decimals = 2;
     var x = Math.pow(10, decimals);
     var s = String(Math.round(v * x) / x); 
     var p = s.indexOf('.');
     if (p < 0) {
         p = s.length;
         s += '.';
     }
     for (var i = s.length - p - 1; i < decimals; i++)
         s += '0';
     if (noCommas == true) // Treats null as false.
         return s;
     var arr    = s.replace('-', '').split('.');
     var result = [];
     var first  = true;
     while (arr[0].length > 0) { // LHS of decimal point.
         if (!first)
             result.unshift(',');
         result.unshift(arr[0].slice(-3));
         arr[0] = arr[0].slice(0, -3);
         first = false;
     }
     if (decimals > 0) {
         result.push('.');
         var first = true;
         while (arr[1].length > 0) { // RHS of decimal point.
             if (!first)
                 result.push(',');
             result.push(arr[1].slice(0, 3));
             arr[1] = arr[1].slice(3);
             first = false;
         }
     }
     if (v < 0)
         return '-' + result.join('');
     return result.join('');
}

var user = null;
function getUser() {
	osContainer = opensocial.Container.get();
    var req = opensocial.newDataRequest();
    var paramViewer = {};
    paramViewer[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
    [MyOpenSpace.Person.Field.COUNTRY,
     MyOpenSpace.Person.Field.CITY,
     MyOpenSpace.Person.Field.POSTALCODE,
     MyOpenSpace.Person.Field.REGION, 
     MyOpenSpace.Person.Field.THUMBNAIL_URL, 
     MyOpenSpace.Person.Field.NAME, 
     MyOpenSpace.Person.Field.PROFILE_URL,
     MyOpenSpace.Person.Field.AGE,
     MyOpenSpace.Person.Field.GENDER];
     
     var paramOwner = {};
     paramOwner[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
    [MyOpenSpace.Person.Field.NAME, 
     MyOpenSpace.Person.Field.AGE,
     MyOpenSpace.Person.Field.GENDER];
     
    req.add(req.newFetchPersonRequest(opensocial.DataRequest.PersonId.VIEWER, paramViewer), "viewer");
    req.add(req.newFetchPersonRequest(opensocial.DataRequest.PersonId.OWNER, paramOwner), "owner");
    req.send(resp_getUser);
};

function resp_getUser(data) {
	var msg = null;
	try{
	  	user = data.get("viewer").getData(); 
		userId = user.getId();
		userCountry = user.getField(MyOpenSpace.Person.Field.COUNTRY);
		userCity = user.getField(MyOpenSpace.Person.Field.CITY);
		userRegion = user.getField(MyOpenSpace.Person.Field.REGION);
		userPostalCode = user.getField(MyOpenSpace.Person.Field.POSTALCODE);
		userThumbnail = user.getField(opensocial.Person.Field.THUMBNAIL_URL);
		userName 	= user.getField(opensocial.Person.Field.NAME);
		userProfile = user.getField(opensocial.Person.Field.PROFILE_URL);
		userAge = user.getField(MyOpenSpace.Person.Field.AGE);
		userGender = user.getField(MyOpenSpace.Person.Field.GENDER);
		userGender = userGender=="Female" ? 1 : 0;
		
		var owner = data.get("owner").getData(); 
		ownerId = owner.getId();
		ownerName = owner.getField(opensocial.Person.Field.NAME);
		ownerAge = owner.getField(MyOpenSpace.Person.Field.AGE);
		ownerGender = owner.getField(MyOpenSpace.Person.Field.GENDER);
		ownerGender = ownerGender=="Female" ? 1 : 0;
		if (ownerAge<14){
			ownerAge = 0;
		}else if (ownerAge<17){
			ownerAge = 1;
		}else if (ownerAge<20){
			ownerAge = 2;
		}else if (ownerAge<26){
			ownerAge = 3;
		}else if (ownerAge<35){
			ownerAge = 4;
		}else if (ownerAge<46){
			ownerAge = 5;
		}else{
			ownerAge = 6;
		}
	}catch(ex){
		if (presentId != 1){
			msg = "To load the \""+presentName+"\" you should add this application. Click on the link above.";
		}else{
			msg = "Add Present Maker to your app list. Create gifts and enjoy !!! Click on the link above.";
		}
	}
	if (userId == null){
		if (msg == null){
			msg = "User authorization failed. Check if you are logged in and refresh the page.";
		}
		hideTabs(msg);
	}else{
		var data = getUserPostData();
		Request.sendPOST(SERVICE_URL+"q"+presentId+"?t=adduser&userId="+userId+"&nopromote=1&json=1", data, initApp, CONTENT_TYPE_JSON);
		//init();
	}
};

var getUserPostData = function(){
	var str = "userName="+encodeURIComponent(userName)+
			  "&thumbnail="+encodeURIComponent(userThumbnail)+
			  "&country="+encodeURIComponent(userCountry)+
			  "&city="+encodeURIComponent(userCity)+
			  "&region="+encodeURIComponent(userRegion)+
	    	  "&postalCode="+encodeURIComponent(userPostalCode)+
    		  "&profile="+encodeURIComponent(userProfile)+
    		  "&age="+encodeURIComponent(userAge)+
    		  "&gender="+encodeURIComponent(userGender)
	    	  "&userId="+userId;
	return str;
}

var mailFilter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

var getFriendById = function(id){
	var friends = friendsData.get("friends").getData().asArray();
	for (var i=0;i<friends.length;i++){
		if (friends[i].getId() == id) return friends[i];		
	}
}
	
var curPage = 1;
var page = 1; 

var fillContainer = function(str){
	container.innerHTML = str;
	gadgets.window.adjustHeight();
}
var adjustHeight = function(mandatory){
	if (allContent.offsetHeight > 800 || mandatory){
		resizer.resizePanel(allContent.offsetHeight+200);
	}
}

var doNothing = function(response){}

var initApp=function(response){
	app=response.data;
	init(); 
}

var showError = function(str){
	if (str == ""){
		errorDiv.style.display = "none";
	}else{
		errorDiv.style.display = "";
		errorDiv.innerHTML = str;
	}
}

var refreshIframes = function(){
	var iframes = document.getElementsByTagName("iframe");
	for (var i=0;i<iframes.length;i++){
		iframes[i].src=iframes[i].src;
	}
}

var AD_LEFT_SIDE_MSGS = ["Play ", "Find your Match at ", "Pass ", "Find Friends on ", "XXX profiles at "];
var AD_BUTTON_COLORS = ["#67A54B", "#47577B", "#FF6E4C", "#0066CC"];
var AD_BUTTON_MSGS = ["Add Application", "Continue", "Next", "Match!", "Play!"];

var getRandomElement = function(ar, limit){
	var limit = limit ? limit : ar.length; 
	return ar[Math.floor(Math.random()*(limit-1))];
}

var getAd = function(position){
	var adStr = "";
	var rnd = Math.floor(Math.random()*100);
	if (rnd < ADS_DATA[position]) {
		/*switch(position){
			case TOP://cocktail
				adStr ='<iframe width="645" height="60" scrolling="no" frameborder="0" marginheight="0" marginwidth="0" src="http://sochr.com/i.php?tag=i&p=189&size=645x60"></iframe>';
				//adStr = '<div id=ad'+position+'><div id="_ryad_79EEB23932"></div></div>';//RockYou Ads
				//adStr = '<iframe id=ad'+position+' src="http://ads.socialmedia.com/myspace/monetize.php?width=645&height=60&pubid=fa49ebd62e3dd022fc7f436d4ce36494&bgcolor=FFFFFF&bordercolor=FFFFFF" border="0" width="645" height="60" name="socialmedia_ad" scrolling="no" frameborder="0"></iframe>';
				//adStr = '<iframe id=ad'+position+' src="http://ads.socialmedia.com/myspace/monetize.php?width=645&height=60&pubid=e1b2a2beefaa470308ceabb6d7893149&bgcolor=FFFFFF&bordercolor=FFFFFF" border="0" width="645" height="60" name="socialmedia_ad" scrolling="no" frameborder="0"></iframe>';//theapper super gifts
				//adStr="<iframe frameborder='0' scrolling='no' marginheight='0' marginwidth='0' width='645' height='75' src='http://www.adparlor.com/serveIFrameAd.aspx?appId=7746912&adtype=6&adTBG=000000&adTColor=FFFFFF&adCntColor=000000&adBG=FFFFFF'  id=ad"+position+" ></iframe>";//adparlor
				break;
			case MIDDLE:
				adStr ='<iframe width="645" height="60" scrolling="no" frameborder="0" marginheight="0" marginwidth="0" src="http://sochr.com/i.php?tag=i&p=189&size=645x60"></iframe>';
				//adStr="<iframe frameborder='0' scrolling='no' marginheight='0' marginwidth='0' width='645' height='75' src='http://www.adparlor.com/serveIFrameAd.aspx?appId=3240238&adtype=6&adTBG=000000&adTColor=FFFFFF&adCntColor=000000&adBG=FFFFFF'  id=ad"+position+" ></iframe>";//adparlor
				 //adStr ='<iframe id=ad'+position+' src="http://ads.socialmedia.com/myspace/monetize.php?width=645&height=60&pubid=fa49ebd62e3dd022fc7f436d4ce36494&bgcolor=FFFFFF&bordercolor=FFFFFF" border="0" width="645" height="60" name="socialmedia_ad" scrolling="no" frameborder="0"></iframe>';//smile 
				//adStr = '<iframe id=ad'+position+' src="http://ads.socialmedia.com/myspace/monetize.php?width=645&height=60&pubid=32feea766d22603b701dba548ef3705f&bgcolor=FFFFFF&bordercolor=FFFFFF" border="0" width="645" height="60" name="socialmedia_ad" scrolling="no" frameborder="0"></iframe>';
				//adStr = '<iframe id=ad'+position+' src="http://banner.tattomedia.com/adtag?source_id=1814&width=645&height=60" scrolling="no" frameborder="0" marginheight="0" marginwidth="0" width="645" height="60"></iframe>'//tatto
				//adStr = '<iframe id=ad'+position+' src="http://ads.socialmedia.com/myspace/monetize.php?width=645&height=60&pubid=11359c3c7acf301dd668000ce532abe7&bgcolor=FFFFFF&bordercolor=FFFFFF" border="0" width="645" height="60" name="socialmedia_ad" scrolling="no" frameborder="0"></iframe>';//hug
				//adStr = '<iframe id=ad'+position+' src="http://ads.socialmedia.com/myspace/monetize.php?width=645&height=60&pubid=e1b2a2beefaa470308ceabb6d7893149&bgcolor=FFFFFF&bordercolor=FFFFFF" border="0" width="645" height="60" name="socialmedia_ad" scrolling="no" frameborder="0"></iframe>';//theapper super gifts
				break;
			case BOTTOM:
				adStr = "<iframe src='http://s2.appotec.com/ha/gift_m/google_ad_gift.html' scrolling='no' frameborder='0' width=728px height=90px></iframe>";
				//adStr = '<div id=ad'+position+'><div id="_ryad_79EEB23932"></div></div>';//RockYou Ads
				//adStr="<iframe frameborder='0' scrolling='no' marginheight='0' marginwidth='0' width='645' height='75' src='http://www.adparlor.com/serveIFrameAd.aspx?appId=8640289&adtype=6&adTBG=000000&adTColor=FFFFFF&adCntColor=000000&adBG=FFFFFF'  id=ad"+position+" ></iframe>";//adparlor
				//adStr = '<iframe id=ad'+position+' src="http://banner.tattomedia.com/adtag?source_id=1814&width=645&height=60" scrolling="no" frameborder="0" marginheight="0" marginwidth="0" width="645" height="60"></iframe>';
				//adStr = '<iframe id=ad'+position+' src="http://ads.socialmedia.com/myspace/monetize.php?width=645&height=60&pubid=61535b2cd43b88c00cb0933fd72f2d40&bgcolor=FFFFFF&bordercolor=FFFFFF" border="0" width="645" height="60" name="socialmedia_ad" scrolling="no" frameborder="0"></iframe>';//jewellery
				//adStr = '<iframe id=ad'+position+' src="http://ads.socialmedia.com/myspace/monetize.php?width=645&height=60&pubid=e1b2a2beefaa470308ceabb6d7893149&bgcolor=FFFFFF&bordercolor=FFFFFF" border="0" width="645" height="60" name="socialmedia_ad" scrolling="no" frameborder="0"></iframe>';//theapper super gifts
				break;
		}*/
		//adStr = "<iframe src='http://s2.appotec.com/ha/gift_m/google_ad_gift.html' scrolling='no' frameborder='0' width=728px height=90px></iframe>";		
		//adStr = "<iframe src='http://ads.socialreach.com/impression?zone=4148&size=728x90' scrolling='no' frameborder='0' width=728px height=90px></iframe>";		
		//adStr = '<iframe width="728" height="90" scrolling="no" frameborder="0" marginheight="0" marginwidth="0" src="http://sochr.com/i.php?tag=i&p=292&size=728x90"></iframe>';
		//adStr = '<iframe src="http://ads.socialmedia.com/myspace/monetize.php?width=728&height=90&pubid=46a00b46475b6cd19d71e885f348bfa6&bgcolor=FFFFFF&bordercolor=FFFFFF" border="0" width="728" height="90" name="socialmedia_ad" scrolling="no" frameborder="0"></iframe>';
		adStr = "<iframe src='http://s2.appotec.com/ha/gift_m/rockyou_ad.html' scrolling='no' frameborder='0' width=728px height=90px></iframe>";		
	}else{
		adStr = '<iframe id=ad'+position+' src="http://adturns.com/ad.php?c=35" width="640" height="100" style="border: none; overflow: hidden" scrolling="no" frameborder="0" ></iframe>';
	}
	
	return adStr;
}

function preloadimages(){
  var myimages=new Array();
  for (i=0;i<preloadimages.arguments.length;i++){
	  myimages[i]=new Image();
	  myimages[i].src = IMG_URL + preloadimages.arguments[i];
  }
}

var findPosX = function(obj) {
	var curleft = 0;
	try{
		if (obj.offsetParent) {
			while (obj.offsetParent) {
				curleft += obj.offsetLeft;
				obj = obj.offsetParent;
			}
		} else if (obj.x) curleft += obj.x;
	}catch(ex){}
	return curleft;
}

var findPosY = function(obj) {
	var curtop = 0;
	try {
		if (obj.offsetParent) {
			while (obj.offsetParent) {
				curtop += obj.offsetTop;
				obj = obj.offsetParent;
			}
		} else
		 if (obj.y) curtop += obj.y;
	}catch(ex){}
	return curtop;
}

var postTo_ = function(subject, content, receiver, postWhere, ptCallback){
	var postType = MyOpenSpace.PostTo.Targets[postWhere];
	var os_token = MyOpenSpace.MySpaceContainer.OSToken;
	var message = opensocial.newMessage(content);
	message.setField(opensocial.Message.Field.TITLE, subject);
	message.setField(opensocial.Message.Field.TYPE, postType);
	osContainer.postTo(os_token, message, receiver, ptCallback);
	refreshIframes();
} 

var selectorObjs = {};
var nextPage = function(containerId, page){
	selectorObjs[containerId].next(page);
}
var prevPage = function(containerId){
	selectorObjs[containerId].prev();
}

var FriendSelector = function(containerId, actions, actionText, addCheckBox,commentText){
	this.curPage = 1;
	this.containerId = containerId;
	this.receivedFriendsCount = 0;
	this.friendsTotalCount = 0;
	this.actions = actions;
	this.actionText = actionText;
	this.checkHasApp = false;
	this.addCheckBox = addCheckBox;
	//this.commentText=commentText;
	var errorDiv, errorDivBottom;
	var self = this;
	var friendObjsByPage = {};
	var checkboxBulletin, checkboxComment;
	
	
	var numberInRow=8;
	var selectAllCheckboxTop, selectAllCheckboxBottom;
	selectorObjs[containerId] = this;
		
	this.prev = function(){
		$(containerId+"_"+self.curPage).style.display = "none";
		$(containerId+"_"+(self.curPage-1)).style.display = "";
		self.curPage--;
	}
			
	this.next = function(page){
		var nextPage = page == undefined ? self.curPage + 1 : page;
		if ($(containerId+"_"+nextPage)){
			$(containerId+"_"+nextPage).style.display = "";
			$(containerId+"_"+self.curPage).style.display = "none";
			self.curPage = nextPage;
		}else{
			try{
				$(containerId+"_"+self.curPage).style.display = "none";
			}catch(e){
				;
			}
			$(containerId).innerHTML += "<div id="+containerId+"_"+nextPage+"><div class=loading style='height:480px;'>"+loadingImgStr+"</div></div>";
			self.curPage = nextPage;
			req_getFriends();
		}
	}
	
	var req_getFriends = function(){
		var req = opensocial.newDataRequest();
		MyOpenSpace.DefaultPageSize = numberInRow*6;
		var params = {}; 
		var page = self.curPage-1;
   		params[opensocial.DataRequest.PeopleRequestFields.FIRST] = page*MyOpenSpace.DefaultPageSize;
		params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
	    [MyOpenSpace.Person.Field.THUMBNAIL_URL, 
	     MyOpenSpace.Person.Field.NAME, 
	     MyOpenSpace.Person.Field.PROFILE_URL
	     ];
   		req.add(req.newFetchPeopleRequest("VIEWER_FRIENDS", params), "friends");
		req.send(resp_getFriends);
		if (page>0){
			refreshIframes();
		}
	}
	
	var resp_getFriends = function(response){
		var friends = response.get("friends").getData().asArray();
		friendObjsByPage["page"+self.curPage] = friends;
		self.receivedFriendsCount += friends.length;
		self.friendsTotalCount = response.get('friends').getData().getTotalSize();
		var str = "<table width=100% cellspacing=4 style='border:1px solid #CCCCCC;'>";
		var friendTable=document.createElement("table");
		friendTable.width="100%";
		friendTable.cellspacing=4;
		friendTable.style.border="1px solid #CCCCCC";
		
		var pageCount = Math.ceil(self.friendsTotalCount / MyOpenSpace.DefaultPageSize);
		var startPage = null;
		var friendTbody=document.createElement("tbody");
		friendTable.appendChild(friendTbody);
		
		if (pageCount>1){
			var friendRow=document.createElement("tr");
			friendTbody.appendChild(friendRow);
			var friendTd=document.createElement("td");
			friendTd.colSpan=10;
			friendTd.align='center';
			friendRow.appendChild(friendTd);
			str += "<tr><td colspan=10 align='center'>";
			var pagesStr = "";
			var span=document.createElement("span");
			for (var p = self.curPage-8; p<self.curPage+8;p++){
				if (p > 0 && p <= pageCount){
					if (startPage == null) startPage = p;
					var color = p == self.curPage ? "color: black" : ""; 
					var anchor=document.createElement("a");
					anchor.style.margin="0px 7px "+color;
					anchor.href="javascript:nextPage(\""+containerId+"\", "+p+")";
					anchor.innerHTML="<b>"+p+"</b>";
					//span.appendChild(anchor);
					span.innerHTML += "<a style='margin: 0px 7px;"+color+"' href='javascript:nextPage(\""+containerId+"\", "+p+")'><b>"+p+"</b></a>";
				}
			}
			if (startPage > 1){
				span.innerHTML  =span.innerHTML + "<a style='margin: 0px 7px;' href='javascript:javascript:nextPage(\""+containerId+"\", "+(self.curPage-1)+")'>Prev</a>";	
			}
			str += pagesStr;
			if (self.curPage < pageCount){
				span.innerHTML += "<a style='margin: 0px 7px;' href='javascript:javascript:nextPage(\""+containerId+"\", "+(self.curPage+1)+")'>Next</a>";
			}
			friendTd.appendChild(span);
			str += "</td><tr>";
		}
		//var selfObj=this;
		for(var i=0; i<friends.length;i++) {
			if (i % numberInRow == 0){ str+= "<tr>"; friendRow=document.createElement("tr");friendTbody.appendChild(friendRow) };
			var friendId = friends[i].getField(opensocial.Person.Field.ID);
			var name = friends[i].getField(opensocial.Person.Field.NAME);
		    var thumbnail = friends[i].getField(opensocial.Person.Field.THUMBNAIL_URL);
		    var profile = friends[i].getField(opensocial.Person.Field.PROFILE_URL);
			var cellWidth = $(containerId).offsetWidth/numberInRow-20;
		    var userTd=document.createElement("td");
		    friendRow.appendChild(userTd);
		    userTd.name="userCell";
		    userTd.width=100/numberInRow+"%";
		    userTd.className="userBox";
		    userTd.onclick=self.doAction;
		    userTd.onmouseover=userMouseOver;
		    userTd.onmouseout=userMouseOut;
		    var table=document.createElement("table");
		    table.vAlign="top";
		    table.width="100%";
		    userTd.appendChild(table);
		    var tbody=document.createElement("tbody");
		    table.appendChild(tbody);
		    var tr=document.createElement("tr");
		    tbody.appendChild(tr);
		    var td=document.createElement("td");
		    td.className="smallFont_userbox";
		    td.title=name;
		    td.innerHTML="<div style='width:"+cellWidth+"px;height:12px;overflow:hidden'>"+name.substring(0,20)+"</div>";
		    var input=document.createElement("input");
		    input.style.display="none";
		    //input.onclick=this.getSelectedFriends;
		    input.type="checkbox";
		    userTd.name=name;
		    userTd.profile=profile;
		    userTd.thumbnail=thumbnail;
		    userTd.id=containerId+"_user_"+friendId;
		    //input.onclick=self.doAction;
		    userTd.onclick=self.doAction;
		    td.appendChild(input);
		    tr.appendChild(td);
		    tr=document.createElement("tr");
		    td=document.createElement("td");
		    tr.appendChild(td);
		    var img=document.createElement("img");
		    img.className="smallImg";
		    td.appendChild(img);
		    img.src=thumbnail;
		    tbody.appendChild(tr);
		   	str += "<td name=userCell width='"+100/numberInRow+"%' class='userBox' onclick='setInnerCheckBox(this)' onmouseover='userMouseOver(this)' onmouseout='userMouseOut(this)'>"+
					"<table valign=top width=100%>"+
						"<tr>"+
        					"<td class=smallFont_userbox title='"+name+"'>"+name.substring(0,20)+
	        				"<input style='display:none' onclick='event.cancelBubble=true;this.getSelectedFriends' type=checkbox name='"+name+"' profile='"+profile+"' thumbnail='"+thumbnail+"' id='"+containerId+"_user_"+friendId+"' /></td>"+
       					"</tr>"+
       					"<tr>"+    
							"<td><img class=smallImg src='"+thumbnail+"' /></td>"+
						"</tr>"+
					"</table>"+
				"</td>";
			if (i % numberInRow == numberInRow-1) {str += "</tr>";};
		}
		str += "</table>";
		//$(containerId+"_"+self.curPage).innerHTML = str;
		$(containerId+"_"+self.curPage).innerHTML ="";
		$(containerId+"_"+self.curPage).appendChild(friendTable);
		gadgets.window.adjustHeight();
	}
	
	this.getSelectedFriends=function(){
		var friends = [];
		var inputs = $(containerId+"_"+self.curPage).getElementsByTagName("input");
		var friendsStr = "";
		for (var i=0;i<inputs.length;i++){
			if (inputs[i].checked ){
				var id = inputs[i].id;
				id = id.substring(id.lastIndexOf("_")+1, id.length);
				var name = inputs[i].name;
				var profile = inputs[i].getAttribute("profile");
				var thumbnail = inputs[i].getAttribute("thumbnail");
				if (id != 6221){
					friends[friends.length] = {id:id, hasApp: true, name: name, profile: profile, thumbnail: thumbnail};
					friendsStr += id+",";
				}
			}
		}
		var resp_getAppUsers = function(response){
			var friendsHaveApp = response.data;
			var size = friendsHaveApp ? friendsHaveApp.length : 0;
			for (var i=0; i<size;i++){
				for (var k=0; k<friends.length; k++){
					if (friends[k].id == friendsHaveApp[i].id ){
						friends[k].hasApp = true;
						break;
					}
				}
			}
			callActions(friends);
		}
		if (self.checkHasApp){
			friendsStr = friendsStr.substring(0, friendsStr.length-1);
			if (friends.length > 0){
				Request.sendGET(SERVICE_URL+"q"+presentId+"?t=appusers&userId="+userId+"&friends="+friendsStr+"&nopromote=1&json=1", resp_getAppUsers, CONTENT_TYPE_JSON);				
			}else{
				self.showError("You haven't selected any friend.");
			}			
		}else{
			callActions(friends);
		}
	}
	
	this.doAction=function(){
		var friends=[];
		var id = this.id;
		id = id.substring(id.lastIndexOf("_")+1, id.length);
		var person = self.getPersonObj(id);
		var name = person.getField(opensocial.Person.Field.NAME);
		var profile = person.getField(opensocial.Person.Field.PROFILE_URL);
		var thumbnail = person.getField(opensocial.Person.Field.THUMBNAIL_URL);
		friends.push({id:id, hasApp: true, name: name, profile: profile, thumbnail: thumbnail});
		callActions(friends);
		
	}
	
	this.showError = function(errorMsg){
		errorDiv.innerHTML = errorMsg;
		errorDivBottom.innerHTML = errorMsg;
	}
	
	var callActions = function(friends){
		if (friends.length == 0){
			self.showError("<b style='font-size:17px;color:red;'>You haven't selected any friend.</b>");
		}else{
			self.showError("");
			for (var i=0;i<self.actions.length;i++){
				self.actions[i](friends, self);
			}
		}
	}
	
	var selectAll = function(){
		var tds = $(containerId+"_"+self.curPage).getElementsByTagName("td");
		for(var i=0;i<tds.length;i++){
		   if (tds[i].getAttribute("name") == "userCell"){
		   		setInnerCheckBox(tds[i], this.checked);
		   }
		}
		selectAllCheckboxTop.checked = this.checked;
		selectAllCheckboxBottom.checked = this.checked;
	}

	this.getPersonObj = function(id){
		var friends = friendObjsByPage["page"+self.curPage];
		for (var i=0;i<friends.length;i++){
			if (id == friends[i].getField(opensocial.Person.Field.ID)){
				return friends[i];
			}
		}
	}
	
	this.isBulletinChecked = function(){
		return this.addCheckBox && checkboxBulletin.checked && !isPostedOnBulletin;
	}
	
	this.isCommentChecked = function(){
		return this.addCheckBox && checkboxComment.checked;
	}
	
	this.show = function(){
		var cont = $(containerId);
		self.curPage = 1;
		self.receivedFriendsCount = 0;
		self.friendsTotalCount = 0;
		var table = document.createElement("table");
		table.width="100%";
		var sendCont = document.createElement("tbody");
		
		//error row
		var row = document.createElement("tr");
		sendCont.appendChild(row);
		errorDivBottom = document.createElement("td");
		row.appendChild(errorDivBottom);
		
		if (self.addCheckBox && app!=null && app.approved && app.approved=="1"){
			var row = document.createElement("tr");
			sendCont.appendChild(row);
			var cell = document.createElement("td");
			checkboxBulletin = document.createElement("input");
			checkboxBulletin.type = "checkbox";
			cell.innerHTML = "<b>Post to your bulletin</b>";
			cell.insertBefore(checkboxBulletin, cell.firstChild);
			row.appendChild(cell);
			
			row = document.createElement("tr");
			sendCont.appendChild(row);
			cell = document.createElement("td");
			checkboxComment = document.createElement("input");
			checkboxComment.type = "checkbox";
			cell.innerHTML = "<b>Post a comment</b>";
			cell.insertBefore(checkboxComment, cell.firstChild);
			row.style.display="none";
			row.appendChild(cell);
		}
		
		var row = document.createElement("tr");
		sendCont.appendChild(row);
		var cell1 = document.createElement("td");
		row.appendChild(cell1);
		selectAllCheckboxTop = document.createElement("input");
		selectAllCheckboxTop.type = "checkbox";
		selectAllCheckboxTop.onclick = selectAll;
		row.style.display="none";
		cell1.innerHTML = "<b>Select all</b>";
		cell1.insertBefore(selectAllCheckboxTop, cell1.firstChild);
		
		var row = document.createElement("tr");
		sendCont.appendChild(row);
		var cell = document.createElement("td");
		cell.align="center";
		row.appendChild(cell);	
		var imgInvite = document.createElement("img");
		imgInvite.src = IMG_URL+(self.actionText == "Invite" ? "invite.png" : "sendgift.png");
		imgInvite.setAttribute("style", "cursor:pointer");
		imgInvite.onclick = function(){self.getSelectedFriends()};
		//cell.appendChild(imgInvite);
		
		if(commentText){
			var commentRow=document.createElement("tr");
			var commentCell=document.createElement("td");
			commentCell.colSpan=2;
			commentCell.innerHTML=commentText;
			commentRow.appendChild(commentCell);
			sendCont.appendChild(commentRow);
		}
						
		table.appendChild(sendCont);
		cont.parentNode.appendChild(table);
		try{
			checkboxBulletin.click();
			//checkboxComment.click();
		}catch(e){
			; 	
		}
		var msg = "";
		if (self.actionText == "Invite"){
			msg = "<div name=info><b style='font-size:17px;'>Select friends by clicking on their photos and click the <span style='color:#3B5998'>Invite Friends</span> button below.</b></div>"+
			"<center><img style='cursor:pointer;margin:7px 0px;' src='"+IMG_URL+"invite.png' ></center>";
		}else{
			msg = "<div name=info><b style='font-size:17px;'>2. Send gifts by clicking on friends' photos</b></div>";
			//"<center><img style='cursor:pointer;margin:7px 0px;' src='"+IMG_URL+"sendgift.png' ></center>";
		}
		var continnerHTML = msg+"<div name=error></div>";
		
		continnerHTML+="<div id="+containerId+"_1></div>";
		cont.innerHTML=continnerHTML;
		errorDiv = cont.getElementsByTagName("div")[1];
		//cont.insertBefore(table, errorDiv);
//			var img = cont.getElementsByTagName("img")[0];
//			img.onclick = function(){self.getSelectedFriends()};
//			selectAllCheckboxBottom = cont.getElementsByTagName("input")[0];
//			selectAllCheckboxBottom.onclick = selectAll;
		
		req_getFriends();
	}
	self.show();
}


var invite = function(friends, selectorObj) {
	var index = -1;
	var sendMsg = $("giftMessageArea") != null;
	var msgText = "";
	if (sendMsg){
		msgText = $("giftMessageArea").value+"<br><br><a href='"+presentUrl+"'>"+presentName+"</a><br><img src='"+selectedPresentImg+"'>";
		msgText+= "<br><br><a href='"+presentUrl+"'>Send me a "+presentName+" back to me</a>";
		var additionalImgs = "";
		var giftCount = giftImgUrls.length > 8 ? 8 : giftImgUrls.length;
		var startIndex = Math.floor(Math.random()*(giftImgUrls.length-giftCount));
		var count=0;
		for (var i=startIndex;i<giftImgUrls.length && count<giftCount;i++){
			if (giftImgUrls[i] != selectedPresentImg){
				additionalImgs += "<img style='margin:8px;' src='"+giftImgUrls[i]+"'>&nbsp;&nbsp;";
				count++;
			}
		}
		msgText+= "<br><br><a href='"+presentUrl+"'>"+additionalImgs+"</a>";
		msgText += superBanner;
	}
	
	var title = "I have sent you "+presentName+". Hope, you'll like it !!!";
	//var msgText = "<a href='"+presentUrl+"'>Click here to see it.</a>";
	
	
	var inviteCallback = function(result){
		if (result == MyOpenSpace.PostTo.Result.SUCCESS ||
		    result == MyOpenSpace.PostTo.Result.CANCELLED){
			nextInvite();
		}
	}
	
	var nextInvite = function(){
		index++;
		if(index < friends.length){
			if (!friends[index].hasApp){
				refreshIframes();
				opensocial.requestShareApp(friends[index].id, defaultInviteMessage, inviteCallback);
			}else if (sendMsg){
				var personObj = selectorObj ? selectorObj.getPersonObj(friends[index].id) : friends[index].person;
				postTo_(title, msgText, personObj, "SEND_MESSAGE", inviteCallback);
			}else{
				nextInvite();
			}
		}else{
			if (selectorObj){
				postWhatWasJustSent(friends, selectorObj);
			}
		}
	}
	
	nextInvite();
}

var sendOnlyInvitation = function(friends, selectorObj) {
	var index = -1;
	
	var inviteCallback = function(result){
		if (result == MyOpenSpace.PostTo.Result.SUCCESS ||
		    result == MyOpenSpace.PostTo.Result.CANCELLED) {
			nextInvite();
		}
	}
	
	var nextInvite = function(){
		index++;
		if(index < friends.length){
			//if (!friends[index].hasApp){
				refreshIframes();
				opensocial.requestShareApp(friends[index].id, defaultInviteMessage, inviteCallback);
			//}
		}
	}
	
	nextInvite();
}


var createButton = function(buttonText, onclickFunction){
	var str = "<span class=blueButton onclick="+onclickFunction+">"+buttonText+"</span>";
	return str;
}

var prevSelected=null;

function setPresentBorder(obj){ 
	if(!obj.selected ){
		obj.style.border="1px solid #EBE2D8";
	}
}

function removePresentBorder(obj){
	if(!obj.selected ){
		obj.style.border="1px solid white";
	}
}

function selectGift(obj){
	obj.selected=true;
	var id=obj.id.substring(obj.id.indexOf("_")+1);
	var radio=$("radio_"+id);
	radio.checked=true;
	if(prevSelected!=null){
		prevSelected.style.border="1px solid white";
		prevSelected.selected=false;
	}
	obj.style.border="1px solid #CCCCCC";
	
	prevSelected=obj;
}

function setInnerCheckBox(obj, check){
	try{
		//if(!obj){
			obj=this;
		//}
		var inputs=obj.getElementsByTagName("input");
		for(var i=0; i<inputs.length; i++){
			if(inputs[i].type=="checkbox"){
				if (check == undefined){
					check = !inputs[i].checked;
				}
				inputs[i].checked = check;
			}
		}
		obj.className = check ? "selectedUserBox" : "userBox";
	}
	catch(ex){
		;
	}
}


function userMouseOver(obj){
	try{
		//if(!obj){
			obj=this;
		//}
		if (obj.className != "selectedUserBox"){
			obj.className = "mouseOverUserBox";
		}
	}
	catch(ex){
		;
	}
}


function userMouseOut(obj){
	try{
		//if(!obj){
			obj=this;
		//}
		if (obj.className != "selectedUserBox"){
			obj.className = "userBox";
		}
	}
	catch(ex){
		;
	}
}

AIM = {

	frame : function(c) {

		var n = 'f' + Math.floor(Math.random() * 99999);
		var d = document.createElement('DIV');
		d.innerHTML = '<iframe style="display:none" src="about:blank" id="'+n+'" name="'+n+'" onload="AIM.loaded(\''+n+'\')"></iframe>';
		document.body.appendChild(d);

		var i = document.getElementById(n);
		if (c && typeof(c.onComplete) == 'function') {
			i.onComplete = function(){c.onComplete(c.id)};
		}

		return n;
	},

	form : function(f, name) {
		f.setAttribute('target', name);
	},

	submit : function(f, c) {
		AIM.form(f, AIM.frame(c));
		if (c && typeof(c.onStart) == 'function') {
			return c.onStart(c.id);
		} else {
			return true;
		}
	},

	loaded : function(id) {
		var i = document.getElementById(id);
		if (typeof(i.onComplete) == 'function') {
			i.onComplete();
		}
	}

}
