/**
 * 
 * PokeTALK API core module
 * 
 * 
 * @category	API
 * @package		PokeTALK API
 * @copyright	2009 (c) Parrot Media Ltd.
 * @author		Parrot Media Ltd.
 * @link		http://www.poketalk.com
 */

 var ptBase = {
 	
	baseUrl:	null,
	secret:		null,
	
	init : function(link, api_key){
		this.baseUrl 	= link;
		this.secret 	= api_key;
	},
	
	check_login : function(callback){
		var params = {api_key:this.secret};
		var result = this.send_request("/user_c/check_login", params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
		
	login : function(username, password, remember_me, callback){
		var expires = 0;
		if(!this.checkbase()){
			return;
		}
		var params = {username: username, password: password, remember_me: remember_me, api_key: this.secret};
		if(typeof(remember_me) != 'undefined' && remember_me == 1){
			expires = 30;
		}
		var result = this.send_request("/user_c/login", params);
		if(this.get_key()){
			this.logout();
		}
		$.cookie('pt_key', ""+result.pt_key, { expires: expires, path: '/',  secure: false });
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},

	logout : function(){
		var params = {api_key:this.secret};
		var result = this.send_request("/user_c/logout", params);
		$.cookie('pt_key', null, { expires: -3600, path: '/', secure: false });	
		return;
	},
	
	get_numbers : function(callback){ 
		var params = {api_key:this.secret};
		var result = this.send_request("/user_c/get_numbers",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	set_number : function(prefix, phone, callback){
		var params = {prefix:prefix, phone:phone,api_key:this.secret};
		var result = this.send_request("/user_c/set_number", params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},

	get_activities : function(callback){
		var result = this.send_request("/user_c/get_activities");
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},

	get_cid : function(callback){
		var params = {api_key:this.secret};
		var result = this.send_request("/user_c/get_cid",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	set_cid : function(cid,callback){
		var params = {api_key:this.secret,cid:cid};
		var result = this.send_request("/user_c/set_cid",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},	
	get_recent_calls : function(callback){
		var params = {api_key:this.secret};
		var result = this.send_request("/user_c/get_recent_calls",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	hide_item : function(type, id, callback){
		var params = {type:type,id:id};
		var result = this.send_request("/user_c/hide_item", params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	get_contact_name : function(number, callback){
		var params = {number:number};
		var result = this.send_request("/static_c/get_contact_name", params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},

	get_comments : function(number, callback){
		var params = {api_key:this.secret,number:number};
		var result = this.send_request("/static_c/get_comments", params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	add_comment : function(number, comment, keep_private, callback){
		var params = {comment:comment,number:number,keep_private:keep_private};
		var result = this.send_request("/static_c/add_comment", params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	hide_comment : function(id, callback){
		var params = {id:id};
		var result = this.send_request("/static_c/hide_comment", params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	get_rate_numbers : function(from, to, callback){
		var params = {from:from, to:to, api_key:this.secret};
		var result = this.send_request("/static_c/get_rate_numbers", params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
    rate_country: function(prefix, callback){
        var params = {prefix:prefix};
        var result = this.send_request("/static_c/rate_country", params);
        if ($.isFunction(callback)) {
            callback(result);
            return;
        }
        return result;
    },
    
    rate_by_countries_id: function(from_country_id, from_line, to_country_id, to_line, callback){
        var params = {from_country_id:from_country_id, from_line: from_line, to_country_id:to_country_id, to_line: to_line};
        var result = this.send_request("/static_c/rate_by_countries_id", params);
        if ($.isFunction(callback)) {
            callback(result);
            return;
        }
        return result;
    },
    
	make_call : function(to_prefix,to_number, callback){
		var params = {to_prefix:to_prefix, to_number:to_number, api_key:this.secret};
		var result = this.send_request("/call_c/make_call", params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	make_call_dynamic : function(to_prefix,to_number, from_prefix, from_number, second_call, callback){
		var params = {to_prefix:to_prefix, to_number:to_number, api_key:this.secret, from_prefix:from_prefix, from_number:from_number, second_call:second_call};
		var result = this.send_request("/call_c/make_call_dynamic", params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	calculate_timeout : function(from,to,callback){
		var params = {from:from, to:to, api_key:this.secret};
		var result = this.send_request("/call_c/calculate_timeout", params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	get_status : function(callback){
		var result = this.send_request("/call_c/get_status");
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	check_blacklist : function(from_prefix, from_phone, to_prefix, to_phone,callback){
		var params = {from_prefix:from_prefix, from_phone:from_phone, to_prefix:to_prefix, to_phone:to_phone};
		var result = this.send_request("/call_c/check_blacklist", params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	check_timerates : function(number,callback){
		var params = {number:number};
		var result = this.send_request("/call_c/check_timerates", params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	generate_stats : function(callback){
		var params = {api_key:this.secret};
		var result = this.send_request("/user_c/generate_stats",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},

	graph_calls_per_day : function(callback){
		var params = {api_key:this.secret};
		var result = this.send_request("/user_c/graph_calls_per_day",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},	

	graph_most_dialed : function(callback){
		var params = {api_key:this.secret};
		var result = this.send_request("/user_c/graph_most_dialed",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},	
	
	graph_biz_group : function(callback){
		var params = {api_key:this.secret};
		var result = this.send_request("/user_c/graph_biz_group",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},			
	
	get_balance : function(callback){
		var params = {api_key:this.secret};
		var result = this.send_request("/user_c/get_balance",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	get_bonus_calls : function(callback){
		var params = {api_key:this.secret};
		var result = this.send_request("/user_c/get_bonus_calls",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},

	get_countries : function(type,callback){
		var params = {my_type:""+type};
		var result = this.send_request("/static_c/get_countries",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	get_user : function(callback){
		var params = {api_key:this.secret};
		var result = this.send_request("/user_c/get_user",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	get_services : function(callback){
		var params = {api_key:this.secret};
		var result = this.send_request("/user_c/get_services",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	get_biz_groups : function(callback){
		var params = {api_key:this.secret};
		var result = this.send_request("/user_c/get_biz_groups",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},	
	request_biz_group : function(email,base_url,callback){
		var params = {api_key:this.secret,email:email,base_url:base_url};
		var result = this.send_request("/user_c/request_biz_group",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	confirm_biz_group : function(key,callback){
		var params = {key:key};
		var result = this.send_request("/user_c/confirm_biz_group",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	get_biz_details : function(biz_id,callback){
		var params = {api_key:this.secret,biz_id:biz_id};
		var result = this.send_request("/user_c/get_biz_details",params);
		
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	cancel_biz_group : function(id,callback){
		var params = {api_key:this.secret,user_id:id};
		var result = this.send_request("/user_c/cancel_biz_group",params);
		
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	is_underling : function(callback){
		var params = {api_key:this.secret};
		var result = this.send_request("/user_c/is_underling",params);
		
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
		
	invite_send : function(email,callback){
		var params = {api_key:this.secret,invite_email:email};
		var result = this.send_request("/static_c/invite_send",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},

	add_user_service : function(service_id,callback){
		var params = {api_key:this.secret,service_id:service_id};
		var result = this.send_request("/static_c/add_user_service",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},


	remove_user_service : function(service_id,callback){
		var params = {api_key:this.secret,service_id:service_id};
		var result = this.send_request("/static_c/remove_user_service",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},


	get_all_services : function(callback){
		var params = {api_key:this.secret};
		var result = this.send_request("/static_c/get_all_services",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},

	order_services : function(new_order,callback){
		var params = {api_key:this.secret,new_order:new_order};
		var result = this.send_request("/static_c/order_services",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	get_dialin_all : function(callback){
		var params = {api_key:this.secret};
		var result = this.send_request("/static_c/get_dialin_all",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},		
	
	load_service : function(service_id,callback){
		var params = {api_key:this.secret,service_id:service_id};
		var result = this.send_request("/user_c/load_service",params,true);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	payment : function (){
		var callback_url = window.location.toString();
		var a = callback_url.replace(/#/, '');
		a = a.replace(/\//g, ';');
		var key = this.get_key();
		var api_key = this.secret;
		window.location = "https://www.poketalk.com/index.php/tranzila_c/tranzila_form/"+key+"/"+api_key+"/"+escape(a);
	},

	kwedit_payment : function (amount){
		//var callback_url = window.location.toString();
		//var a = callback_url.replace(/#/, '');
		//a = a.replace(/\//g, ';');
		var key = this.get_key();
		var api_key = this.secret;
		window.location = "http://www.poketalk.com/index.php/pages_c/kwedit_pay/"+amount+"/"+key+"/"+api_key+"/";
	},
		
	get_tip : function(callback){
		var params = {api_key:this.secret};	
		var result = this.send_request("/static_c/get_tip",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	signup : function(email,pass,callback){
		var my_secret = $.cookie('temp_api');
		if(typeof(my_secret) == 'undefined' || my_secret == null){
			my_secret = this.secret;
		}
		var params = {api_key:my_secret, email:email, pass:pass};	
		var result = this.send_request("/user_c/signup", params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	signup_sip : function(email,pass,sip,origin,callback){
		var my_secret = $.cookie('temp_api');
		if(typeof(my_secret) == 'undefined' || my_secret == null){
			my_secret = this.secret;
		}
		var params = {api_key:my_secret, email:email, pass:pass, sip:sip, origin:origin};	
		var result = this.send_request("/user_c/signup", params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	forgot_pass_send : function(email,callback){
		var params = {api_key:this.secret,email:email};	
		var result = this.send_request("/static_c/forgot_pass_send",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	set_new_pass : function(new_pass,fp_key,callback){
		var params = {new_pass:new_pass,fp_key:fp_key};	
		var result = this.send_request("/static_c/set_new_pass",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},	
	get_free_dialin : function(did_number,callback){
		var params = {did_number:did_number,api_key:this.secret};	
		var result = this.send_request("/static_c/get_free_dialin",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},
	
	process_coupon : function(code, callback){
		var params = {api_key:this.secret, coupon:code};
		var result = this.send_request("/static_c/process_coupon",params);
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	},	

    sms_send : function(to_prefix,to_number,sms_body, caller_id, callback){
        var params = {api_key:this.secret, to_prefix:to_prefix,to_number:to_number,sms_body:sms_body,caller_id:caller_id};
        var result = this.send_request("/call_c/sms_send",params);
        if ($.isFunction(callback)) {
            callback(result);
            return;
        }
        return result;
    },      

    sms_send_batch : function(numbers,sms_body, caller_id, callback){
        var params = {api_key:this.secret, numbers:numbers, sms_body:sms_body, caller_id:caller_id};
        var result = this.send_request("/call_c/sms_send_batch",params);
        if ($.isFunction(callback)) {
            callback(result);
            return;
        }
        return result;
    },      
 
    get_homepage_counter: function(callback) {
      //  var params = {api_key: ptBase.secret, limit: limit};
        var result = ptBase.send_request("/static_c/get_homepage_counter");
        if ($.isFunction(callback)) {
            callback(result);
            return;
        }
        return result;
    },
    
//----------------------------------------------------------------------------
 // 
 // Extended functions
 //
 //----------------------------------------------------------------------------
	test_number : function(number){
		var pat = /^[0-9#]+$/;
		return pat.test(number);
	},
	
	is_email : function(str){
		if(str.match(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i)){
			return true;
		}else{
			return false;
		}
	},

		
 //----------------------------------------------------------------------------
 // 
 // Private functions
 //
 //----------------------------------------------------------------------------
	checkbase: function(){
		if(this.baseUrl == null){
			alert('Set base URL first.');
			return false;
		}
		if(this.secret == null){
			alert('Set API secret first.');
			return false;
		}
		return true;
	},
	
	send_request : function(url, params, return_type){
		var response = $.ajax({
					type: "POST",
					url: this.baseUrl + url,
					data: (params),
					async: false,
					cache: true
				}).responseText;
		if (response=="") {
			return false;
		}
		if (return_type){
			return response;
		}
		return eval("(" + response + ")");
	},


	get_key : function(){
		var key = $.cookie('pt_key');
		if(typeof(key) == 'undefined' || key == null){
			return false;
		}
		return key;
	},
	
	login_sip : function(username, password, remember_me, callback){
		var expires = 0;
		if(!this.checkbase()){
			return;
		}
		var params = {username: username, password: password, remember_me: remember_me, api_key: this.secret};
		if(typeof(remember_me) != 'undefined' && remember_me == 1){
			expires = 30;
		}
		var result = this.send_request("/user_c/login_sip", params);
		if(this.get_key()){
			this.logout();
		}
		$.cookie('pt_key', ""+result.pt_key, { expires: expires, path: '/',  secure: false });
		if ($.isFunction(callback)) {
			callback(result);
			return;
		}
		return result;
	}
							
 };


