//{{{
// Mojo macro
// v0.1
// 04th October 2007
// 
// Author: Craig Cook, craig [dot] cook [at] bt [dot] com
//
// Usage: <<mojoMacro Option>>
// Where option is the mode that you using

config.macros.mojo = {};

config.macros.mojo.handler = function(place, macro, params){
    //Handler for macro
    //Assigns action based upon parameters passed in

    if (params[0] != undefined) {
        if (params[0] == 'SMS') {
            this.SMSUI(place);
        } else if (params[0] == 'CALL') {
            this.callUI(place);
        }
    }    
};

config.macros.mojo.sendSMS = function(){
    //Builds SMS request
    if (document.getElementById('txtPhoneNo').value != '') {
        if (document.getElementById('txtSMSText').value != ''){
            url = "http://mojo.treeho.us/messages";
            //url = "http://localhost:49783/Tests/Default.aspx";
            gadgetkey = "79884a16da31dc7d4237c8772e711a3bcdfd4cb1";
            gadgetsecret = "78405df3342d40e5c99d895c5180561dd68d208d";
            username = "boycook";
            recipient = document.getElementById('txtPhoneNo').value;
            text = document.getElementById('txtSMSText').value;
            name = this.getName();
            digest = this.digest(username, gadgetkey, name, gadgetsecret);
            postdata = "name=" + encodeURI(name) + "&recipient=%2B" + recipient + "&text=" + encodeURI(text) + "&gadgetkey=" + encodeURI(gadgetkey) + "&username=" + encodeURI(username) + "&digest=" + encodeURI(digest);
            this.callMojo(url, postdata);
        } else {
            alert('You must enter a message');
        }
        
    } else {
        alert('You must enter a phone number');
    }
};

config.macros.mojo.makeCall = function(){
    //Builds SMS request
    if (document.getElementById('txtPhoneFrom').value != '') {
        if (document.getElementById('txtPhoneTo').value != ''){
            url = "http://mojo.treeho.us/calls";
            //url = "http://localhost:49783/Tests/Default.aspx";
            gadgetkey = "79884a16da31dc7d4237c8772e711a3bcdfd4cb1";
            gadgetsecret = "78405df3342d40e5c99d895c5180561dd68d208d";
            username = "boycook";
            caller = document.getElementById('txtPhoneFrom').value;
            callee = document.getElementById('txtPhoneTo').value;
            name = this.getName();
            digest = this.digest(username, gadgetkey, name, gadgetsecret);
            postdata = "name=" + encodeURI(name) + "&caller=%2B" + caller + "&callee=%2B" + callee + "&gadgetkey=" + encodeURI(gadgetkey) + "&username=" + encodeURI(username) + "&digest=" + encodeURI(digest);
            this.callMojo(url, postdata);
        } else {
            alert('You must enter a callee phone number');
        }
        
    } else {
        alert('You must enter a caller phone number');
    }
};

config.macros.mojo.getName = function(recipient){
    //Creates a unique id for the message
    var dt = new Date();
    return dt.getMonth() + '-' + dt.getDate() + '-' + dt.getHours() + '-' + dt.getMinutes() + '-' + dt.getSeconds()
};

config.macros.mojo.digest = function(username, gadgetkey, name, gadgetsecret){
    //Gets the SHA for digest    
    return Crypto.hexSha1Str(username + ":" + gadgetkey + ":" + name + ":" + gadgetsecret);
};

config.macros.mojo.callMojo = function(url, postdata){
    //Makes mojo call 
    //var ret = doHttp("POST",url,postdata,null,null,null,null,null,null);        
    try {
        var xmlhttp = getXMLHttpRequest();
        
	    if(window.Components && window.netscape && window.netscape.security && document.location.protocol.indexOf("http") == -1)
		    window.netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");

        xmlhttp.open("POST", url, false);

        xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xmlhttp.setRequestHeader("Content-length", postdata.length);
        xmlhttp.setRequestHeader("Connection", "close");        
        xmlhttp.send(postdata);
        
        //alert(xmlhttp.responseText);
    }      
    catch(ex) {
    }    
};

config.macros.mojo.SMSUI= function(place){
	// Some code to insert the appropriate styles into StyleSheet tiddler
	var cssText = "div.feedSelector {border-width:0px; border:0; padding:5px;} \n" +
                  "div.feedSelector TABLE {border-width:0px; border:0; } \n" +
		          "div.feedSelector SELECT {width:300px;} \n" +
		          "div.feedSelector INPUT.Text {width:300px;} \n" +
		          "div.feedSelector INPUT.Button {width:100px;}";

	//store.saveTiddler("StyleSheet","StyleSheet", cssText);
	setStylesheet(cssText);

	var feedSelector = createTiddlyElement(place,"div",null,"feedSelector");
	var feedTable = createTiddlyElement(createTiddlyElement(feedSelector,"table"),"tbody");

	var feedTR = createTiddlyElement(feedTable,"tr");
	var feedTD = createTiddlyElement(feedTR,"td");
    createTiddlyText(feedTD, "Enter Message Text: ");

    var feedTD = createTiddlyElement(feedTR,"td");
	var txtSMSText = createTiddlyElement(feedTD,"textarea");
	txtSMSText.setAttribute("width","300px");
	txtSMSText.setAttribute("name","txtSMSText");
	txtSMSText.setAttribute("id","txtSMSText");
	txtSMSText.setAttribute("rows","4");

	var feedTR = createTiddlyElement(feedTable,"tr");
	var feedTD = createTiddlyElement(feedTR,"td");
    createTiddlyText(feedTD, "Enter Recipient Phone Number: ");

    var feedTD = createTiddlyElement(feedTR,"td");
	var txtPhoneNo = createTiddlyElement(feedTD,"input");
	txtPhoneNo.setAttribute("type","text");
	txtPhoneNo.setAttribute("name","txtPhoneNo");
	txtPhoneNo.setAttribute("id","txtPhoneNo");
	txtPhoneNo.setAttribute("value","44");

	var feedTR = createTiddlyElement(feedTable,"tr");
	var feedTD = createTiddlyElement(feedTR,"td");
	feedTD.setAttribute("colspan","2");
	feedTD.setAttribute("align","center");

	var butSend = createTiddlyElement(feedTD,"input");
	butSend.setAttribute("type","button");
	butSend.setAttribute("name","butSend");
	butSend.setAttribute("value", "Send Message");
	butSend.setAttribute("onclick","config.macros.mojo.sendSMS();");
};

config.macros.mojo.callUI= function(place){
	// Some code to insert the appropriate styles into StyleSheet tiddler
	var cssText = "div.feedSelector {border-width:0px; border:0; padding:5px;} \n" +
                  "div.feedSelector TABLE {border-width:0px; border:0; } \n" +
		          "div.feedSelector SELECT {width:300px;} \n" +
		          "div.feedSelector INPUT.Text {width:300px;} \n" +
		          "div.feedSelector INPUT.Button {width:100px;}";

	//store.saveTiddler("StyleSheet","StyleSheet", cssText);
	setStylesheet(cssText);

	var feedSelector = createTiddlyElement(place,"div",null,"feedSelector");
	var feedTable = createTiddlyElement(createTiddlyElement(feedSelector,"table"),"tbody");

	var feedTR = createTiddlyElement(feedTable,"tr");
	var feedTD = createTiddlyElement(feedTR,"td");
    createTiddlyText(feedTD, "Call from: ");

    var feedTD = createTiddlyElement(feedTR,"td");
	var txtPhoneFrom = createTiddlyElement(feedTD,"input");
	txtPhoneFrom.setAttribute("type","text");
	txtPhoneFrom.setAttribute("name","txtPhoneFrom");
	txtPhoneFrom.setAttribute("id","txtPhoneFrom");
	txtPhoneFrom.setAttribute("value","44");

	var feedTR = createTiddlyElement(feedTable,"tr");
	var feedTD = createTiddlyElement(feedTR,"td");
    createTiddlyText(feedTD, "Call to: ");

    var feedTD = createTiddlyElement(feedTR,"td");
	var txtPhoneTo = createTiddlyElement(feedTD,"input");
	txtPhoneTo.setAttribute("type","text");
	txtPhoneTo.setAttribute("name","txtPhoneTo");
	txtPhoneTo.setAttribute("id","txtPhoneTo");
	txtPhoneTo.setAttribute("value","44");

	var feedTR = createTiddlyElement(feedTable,"tr");
	var feedTD = createTiddlyElement(feedTR,"td");
	feedTD.setAttribute("colspan","2");
	feedTD.setAttribute("align","center");

	var butCall = createTiddlyElement(feedTD,"input");
	butCall.setAttribute("type","button");
	butCall.setAttribute("name","butCall");
	butCall.setAttribute("value", "Call");
	butCall.setAttribute("onclick","config.macros.mojo.makeCall();");
};

//}}}