/**
 * @param serviceCallback =
 *            <BR> { <BR>
 *            onSuccess : // associate callback for success service exection,
 *            <BR>
 *            onBusinessFailure : // associate callback for service business
 *            failure, <BR>
 *            onError : // associate callback for general runtime error <BR> };
 * 
 * 
 * @author Ramalingesha ML
 */

Tp.service.user.UserService = {

	/**
	 * Registers a new user, role is company.
	 * 
	 * @param serviceInput =
	 *            <BR> { <BR>
	 *            roleId : // User role id, <BR>
	 *            email : // user email, <BR>
	 *            companyName : // Name of the company <BR>
	 *            companyName : // Name of the company <BR>
	 *            industryType : // Industry type <BR>
	 *            website : // Company website <BR>
	 *            contactPerson : // Contact person name <BR>
	 *            country : // country <BR>
	 *            mobileNo : // Company mobile no <BR>
	 *            telNo : // Company telephone no<BR> };
	 * 
	 * 
	 */
	registerCompany : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.userObj);

		this.sendRequest("registerCompany", requestParamAssembler,
				serviceCallback);
	},
	getTpos : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.userObj);

		this.sendRequest("getTpoList", requestParamAssembler, serviceCallback);
	},
	findCompanyById : function(serviceCallback) {

		this.standardServiceRequest("findCompanyDetailsAction", null,
				serviceCallback);

	},
	queryCompanyDetails : function(serviceCallback) {

		this.standardServiceRequest("queryCompanyDetailsAction", null,
				serviceCallback);

	},
	queryInstituteDetails : function(serviceCallback) {

		this.standardServiceRequest("queryInstituteDetailsAction", null,
				serviceCallback);

	},

	sendMailToUser : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.bulkMailObj);

		this.sendRequest("bulkMailAction", requestParamAssembler,
				serviceCallback);

	},
	findContactDetailsofAmc : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.dataObj);

		this.sendRequest("queryAssociatedAmcDetailsAction",
				requestParamAssembler, serviceCallback);

	},

	sendBulkMailFromAMCOrCompany : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.mailObj);

		this.sendRequest("sendBulkMailFromAMCOrCompanyAction",
				requestParamAssembler, serviceCallback);

	},

	manageCompany : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.companyObj);

		this.sendRequest("manageCompanyDetailsAction", requestParamAssembler,
				serviceCallback);
	},

	companyInternShip : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.InternShipObj);

		this.sendRequest("internShipAction", requestParamAssembler,
				serviceCallback);
	},
	companyBrandBuilder : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.BrandBuilderObj);

		this.sendRequest("brandBuilderAction", requestParamAssembler,
				serviceCallback);
	},
	companyManHunt : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.ManHuntObj);

		this.sendRequest("manHuntAction", requestParamAssembler,
				serviceCallback);
	},
	companyManDate : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.ManDateObj);

		this.sendRequest("manDateAction", requestParamAssembler,
				serviceCallback);
	},
	companyOnCampus : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.OnCampusObj);

		this.sendRequest("onCampusAction", requestParamAssembler,
				serviceCallback);
	},

	manageInstitute : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.tpoObj);

		this.sendRequest("manageInstituteDetailsAction", requestParamAssembler,
				serviceCallback);

	},
	queryCittiesBasedOnState : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.stateObj);

		this.sendRequest("getCitiesBasedOnStateAction", requestParamAssembler,
				serviceCallback);

	},
	querySpecializationBasedOnQualification : function(serviceInput,
			serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.qualificationObj);

		this.sendRequest("getSpecializationBasedOnQualificationAction", requestParamAssembler,
				serviceCallback);
	},

	findInstituteById : function(serviceCallback) {
		this.standardServiceRequest("findInstituteDetailByUserAction", null,
				serviceCallback);

	},

	/**
	 * Registers a new user, role is candidate.
	 * 
	 * @param serviceInput =
	 *            <BR> { <BR>
	 *            roleId : // User role id, <BR>
	 *            email : // user email, <BR>
	 *            firstName : // First Name <BR>
	 *            lastName : // Last Name <BR>
	 *            gender : // gender <BR>
	 *            dob : // Date of birth <BR>
	 *            mobileNo : // Mobile No <BR>
	 *            telNo : // Telephone No <BR>
	 *            yearOfExp : // Year Of Exp <BR>
	 *            monthOfExp : // Month Of Exp <BR>
	 *            nationality : // Nationality <BR>
	 *            keySkillset : // Key Skillset <BR>
	 *            highestQulification : // Highest Qulification <BR>
	 *            highestQulOther : // Other Highest Qulification <BR>
	 *            resumeTitle : // Resume Title <BR> };
	 * 
	 * 
	 */
	registerCandidate : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.userObj);

		this.sendRequest("registerCandidate", requestParamAssembler,
				serviceCallback);
	},

	/**
	 * Registers a new user, role is TPO.
	 * 
	 * @param serviceInput =
	 *            <BR> { <BR>
	 *            roleId : // User role id, <BR>
	 *            city://city,<BR>
	 *            cityId://city Id,<BR>
	 *            email : // user email, <BR>
	 *            instituteName : // institute Name <BR>
	 *            tpoName : // tpo Name <BR>
	 *            address : // address <BR>
	 *            mobileNo : // Mobile No <BR>
	 *            telNo : // Telephone No <BR>
	 *            logo : // logo <BR>
	 *            comments : // comments <BR>
	 *            website : // website <BR>
	 *            course : // course <BR>
	 * 
	 * 
	 */
	registerTpo : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.userObj);

		this.sendRequest("registerTpo", requestParamAssembler, serviceCallback);
	},

	/**
	 * Registers a new user, role is MENTOR.
	 * 
	 * @param serviceInput =
	 *            <BR> { <BR>
	 *            roleId : // User role id, <BR>
	 *            city://city,<BR>
	 *            cityId://city Id,<BR>
	 *            email : // user email, <BR>
	 *            instituteName : // institute Name <BR>
	 *            tpoName : // tpo Name <BR>
	 *            address : // address <BR>
	 *            mobileNo : // Mobile No <BR>
	 *            telNo : // Telephone No <BR>
	 *            logo : // logo <BR>
	 *            comments : // comments <BR>
	 *            website : // website <BR>
	 *            course : // course <BR>
	 * 
	 * 
	 */
	registerMentor : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.userObj);

		this.sendRequest("registerMentor", requestParamAssembler,
				serviceCallback);
	},

	/**
	 * @param serviceInput =
	 *            <BR> { <BR>
	 *            filePath : //filePath of the uploaded resume <BR>};
	 */

	uploadCandidateResume : function(serviceInput, serviceCallback) {

		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		if (serviceInput != null) {
			requestParamAssembler.assembleObject(serviceInput.fileObj);
		}
		this.sendRequest("uploadResumeAction", requestParamAssembler,
				serviceCallback);
	},

	/**
	 * Lists all the Pitch to Users
	 */
	findPitchToUsers : function(serviceInput, serviceCallback) {

		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		if (serviceInput != null) {
			requestParamAssembler.assembleObject(serviceInput.newObj);
		}

		this.sendRequest("listPitchToUsers", requestParamAssembler,
				serviceCallback);
	},

	/**
	 * Finds Company Details
	 * 
	 * @param serviceInput=
	 *            <BR>{<BR>
	 *            comapnyId: //Company Id <BR>
	 */
	findCompany : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.newCompanyObj);

		this.sendRequest("viewCompanyAction", requestParamAssembler,
				serviceCallback);

	},

	/**
	 * Finds Company Details
	 * 
	 * @param serviceInput=
	 *            <BR>{<BR>
	 *            tpoId: //Tpo Id <BR>
	 * 
	 */
	findInstitute : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.newInsttuteObj);
		this.sendRequest("viewInstituteAction", requestParamAssembler,
				serviceCallback);

	},

	/**
	 * Registers a new user, role is Amc or Ami.
	 * 
	 * @param serviceInput =
	 *            <BR> { <BR>
	 *            roleId : // User role id, <BR>
	 *            email : // user email, <BR>
	 *            firstName : // First Name <BR>
	 *            lastName : // Last Name <BR>
	 *            gender : // gender <BR>
	 *            dob : // Date of birth <BR>
	 *            mobileNo : // Mobile No <BR>};
	 * 
	 */

	registerUser : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.userObj);

		this
				.sendRequest("registerUser", requestParamAssembler,
						serviceCallback);
	},

	updateCompanyStatus : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.userObj);

		this.sendRequest("updateCompanyStatusAction", requestParamAssembler,
				serviceCallback);
	},

	updateTpoStatus : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.userObj);

		this.sendRequest("updateTpoStatusAction", requestParamAssembler,
				serviceCallback);
	},

	changePassword : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.newPasswordObj);

		this.sendRequest("changePasswordAction", requestParamAssembler,
				serviceCallback);
	},
	forgotPassword : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleObject(serviceInput.forgotPasswordObj);

		this.sendRequest("forgotPasswordAction", requestParamAssembler,
				serviceCallback);
	},
	standardServiceRequest : function(actionId, serviceInput, serviceCallback) {

		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		if (serviceInput != null) {
			requestParamAssembler.assembleObject(serviceInput);
		}
		this.sendRequest(actionId, requestParamAssembler, serviceCallback);

	},

	sendRequest : function(actionId, requestParamAssembler, serviceCallback) {
		var config = {

			context :null,
			actionId :actionId,
			parameters :requestParamAssembler,
			onSuccess : function(result) {
				serviceCallback.onSuccess(result);
			},
			onBusinessFailure : function(result) {
				serviceCallback.onBusinessFailure(result);
			},
			onError : function() {
				alert("Unknown error at server.....");
			}
		};

		var talentPortalServer = new Tp.core.TalentPortalServer(config);
		talentPortalServer.request();
	}
};

Tp.service.user.UserAssociationService = {
	/**
	 * @param serviceInput =
	 *            <BR> { <BR>
	 *            userId : // LoginUser Id, <BR> };
	 */
	findReportingUsers : function(serviceCallback) {
		this.standardServiceRequest("listcollegeAction", null, serviceCallback);
	},

	/**
	 * @param serviceInput =
	 *            <BR> { <BR>
	 *            userId : // LoginUser Id, <BR> };
	 */
	queryAssociatedUsers : function(relationshipType, serviceCallback) {

		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleString("relationshipType",
				relationshipType);

		this.standardServiceRequest("queryAssociatedUsersAction",
				requestParamAssembler, serviceCallback);
	},

	/**
	 * @param serviceInput =
	 *            <BR> { <BR>
	 *            userId : // LoginUser Id, <BR> };
	 */
	queryUserAssociationStatus : function(serviceInput, serviceCallback) {

		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		if (serviceInput != null) {
			requestParamAssembler.assembleObject(serviceInput);
		}

		this.standardServiceRequest("queryUserAssociationStatusAction",
				requestParamAssembler, serviceCallback);
	},

	/**
	 * @param serviceInput =
	 *            <BR> { <BR>
	 *            users : // LoginUser Id, <BR>
	 *            relationshipType : <BR>};
	 */
	establishUserRelationship : function(serviceInput, serviceCallback) {

		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		requestParamAssembler.assembleString("relationshipType",
				serviceInput.relationshipType);

		requestParamAssembler.assembleString("userId", serviceInput.userId);

		requestParamAssembler.assembleListAsParam(serviceInput.users, "users");

		this.standardServiceRequest("establishUserRelationShipAction",
				requestParamAssembler, serviceCallback);

	},

	findUserByRole : function(serviceInput, serviceCallback) {
		var requestParamAssembler = new Tp.core.RequestParamAssembler();

		if (serviceInput != null) {
			requestParamAssembler.assembleObject(serviceInput);
		}

		this.standardServiceRequest("listUserByRoleAction",
				requestParamAssembler, serviceCallback);

	},

	standardServiceRequest : function(actionId, requestParamAssembler,
			serviceCallback) {
		var config = {

			context :null,
			actionId :actionId,
			parameters :requestParamAssembler,
			onSuccess : function(result) {
				serviceCallback.onSuccess(result);
			},
			onBusinessFailure : function(result) {
				serviceCallback.onBusinessFailure(result);
			},
			onError : function() {
				alert("Unknown error at server.....");
			}
		};

		var talentPortalServer = new Tp.core.TalentPortalServer(config);
		talentPortalServer.request();
	}
};

IUserService = Tp.service.user.UserService;

