var apiKey = "http%3A%2F%2Fwww.cellblock.com";
var showItem;

function apiInit(show, category) {
	suppressErrors();
	initContext();
	
	showItem = show;
	
	if (showItem){
		getElement("apiIntro").innerHTML = "<strong>Sections:</strong> <a href='api.htm'>Overview</a> | <a href='#gettingStarted'>Getting Started</a> | <a href='#apiMethods'>API Methods</a> | <a href='#apiToolkit'>Toolkit</a> | <a href='#advancedTools'>Advanced Tools</a>";
		
		getElement("apiIntro").innerHTML += "<br /><br />";
		
		getElement("apiIntro").innerHTML += "<strong>Browse API Methods:</strong> <a href='api.htm?show=MethodList'>All</a>" +
                                        " | <a href='api.htm?show=MethodList&category=Annotation'>Annotation</a>" +
                                        " | <a href='api.htm?show=MethodList&category=Attribute'>Attribute</a>" +
                                        " | <a href='api.htm?show=MethodList&category=Cellblock'>Cellblock</a>" +
                                        " | <a href='api.htm?show=MethodList&category=Comment'>Comment</a>" +
                                        " | <a href='api.htm?show=MethodList&category=Frames'>Frame</a>" +
                                        " | <a href='api.htm?show=MethodList&category=Rating'>Rating</a>" +
                                        " | <a href='api.htm?show=MethodList&category=Realm'>Realm</a>" +
                                        " | <a href='api.htm?show=MethodList&category=filter'>Filters</a>" +
                                        " | <a href='api.htm?show=MethodList&category=System'>System</a>" +
                                        " | <a href='api.htm?show=MethodList&category=User'>User</a>";
		
		var apiContent = getElement("apiContent");
		if( apiContent != null){
			if( showItem == "MIME"){
				showMime(apiContent);	
			}else if( showItem == "AQL"){
				showAQL(apiContent);	
			}else if( showItem == "WSDL"){
				showWSDL(apiContent);	
			}else if( showItem == "Wrapper"){
				showWrapper(apiContent);	
			}else if( showItem == "Util"){
				showUtil(apiContent);	
			}else if( showItem == "ActionScript"){
				showActionScript(apiContent);	
			}else if( showItem == "EmailAssistant"){
				showEmailAssistant(apiContent);	
			}else if( showItem == "Realm"){
				showRealm(apiContent);	
			}else if( showItem == "apiKey" ){
				showApiKey(apiContent);
			}else if( showItem == "MethodList" ){
				showMethodList(apiContent, category);
			}else {
				showMethod(apiContent);
			}
		}
	}else {
		var apiIntro = getElement("apiIntro");
		if( apiIntro != null){
			apiIntro.innerHTML = getApiContent('apiIntro');
		}
	}
	
	getGeneralToc();
	getToolkitToc();
	getMethodsToc();
	getAdvancedToc();
	/*getExamplesToc();*/
}

function clearEmail(el){
    if(el.value == "email@address.com"){
       el.value = "";
   }
}

function generateErrorCodes(errorCodes){
	var el = getElement("errorCodes");
	el.innerHTML = "";
	
	for(var i in errorCodes){
		var errorCode = errorCodes[i];
		el.innerHTML += errorCode[0] + " - " + errorCode[1] + " - " + errorCode[2] + "<br />";
	}
}

/*function generateExample(method){
	if(method){
		var exampleSource = getElement("exampleSource");
		var exampleUrl = getApiExample(method);
		if(exampleUrl){
			var url = "ex/getExample.htm?name=" + exampleUrl;
			
			exampleSource.setAttribute("src", url + "&mime=txt");
			
			var launchExample = getElement("launchExample");
			var a = _a(url, "Launch Example");
			a.setAttribute("target", exampleUrl);
			launchExample.appendChild(a);
		}else{
			var exampleArea = getElement("exampleArea");
			var parent = exampleArea.parentNode;
			
			parent.removeChild(exampleArea);
		}
	}
}*/

function generateExampleError(url){
	getElement("exampleError").setAttribute("src", url);
}

function generateFixedResponses(jsonExample, xmlExample){
	var jsonIframe = getElement("jsonResponse");
	var jsonParent = jsonIframe.parentNode;
	var xmlIframe = getElement("xmlResponse");
	var xmlParent = xmlIframe.parentNode;
	
	var fixedJson = document.createElement("code");
	fixedJson.setAttribute("id", "exampleCode");
	if(jsonExample != ""){
		var foo = jsonExample.split("\n");
		for(var i = 0; i < foo.length; i++){
			fixedJson.appendChild(textNode(foo[i]));
			fixedJson.appendChild(_br());
		}
		
		//fixedJson.appendChild(document.createTextNode(jsonExample));
	}else{
		fixedJson.appendChild(document.createTextNode("No Example"));
	}
	jsonParent.insertBefore(fixedJson, jsonIframe);
	jsonParent.removeChild(jsonIframe);
	
	var fixedXml = document.createElement("code");
	fixedXml.setAttribute("id", "exampleCode");
	if(xmlExample != ""){
		var foo = xmlExample.split("\n");
		for(var i = 0; i < foo.length; i++){
			fixedXml.appendChild(textNode(foo[i]));
			fixedXml.appendChild(_br());
		}
		
		//fixedXml.appendChild(document.createTextNode(xmlExample));
	}else{
		fixedXml.appendChild(document.createTextNode("No Example"));
	}
	
	xmlParent.insertBefore(fixedXml, xmlIframe);
	xmlParent.removeChild(xmlIframe);
}

function generateJsonResponse(url){
	getElement("jsonResponse").setAttribute("src", url);
}

function generateParameters(params){
	var el = getElement("parameters");
	el.innerHTML = "";
	
	for(var i in params){
		var param = params[i];
		el.innerHTML += "<b><i>" + param.name + "</i></b><br />";
		el.innerHTML += param.documentation + "<br />";
		if(param.required == "false"){
			el.innerHTML += "<i>Required: Optional</i><br />";
		}
		el.innerHTML += "<br />";
	}		
}

function generateXmlResponse(url){
	getElement("xmlResponse").setAttribute("src", url);
}

function getAdvancedToc(){
	var el = getElement("advancedToc");
	if( el != null){
		el.innerHTML = getApiContent('advancedToc');
	}
}

function getGeneralToc(){
	var el = getElement("generalToc");
	if( el != null){
		el.innerHTML = getApiContent('generalToc');
	}	
}

function getToolkitToc(){
	var el = getElement("toolkitToc");
	if( el != null){
		el.innerHTML = getApiContent('toolkitToc');
	}	
}

function getMethodsToc(){
	var el = getElement("methodsToc");
	if( el != null){
		el.innerHTML = getApiContent('methodsToc');
	}	
}

/*function getExamplesToc(){
	var el = getElement("examplesToc");
	if( el != null){
		el.innerHTML = getApiContent('examplesToc');
	}
}*/

function getMethodData(method){
	GetDocumentation(apiKey, method, null, null, null, setMethodData);
}

function requestRealm(){
	var email = getElement("realmEmail").value;
	var apiKey = "http%3A%2F%2Fwww.cellblock.com";
	CreateRealm(apiKey, email, function(){alert("Request sent!");});
}

function setMethodData(data){
	var apiIntro = getElement("apiIntro");
	apiIntro.innerHTML += "<br /><br />";
	apiIntro.innerHTML += getApiContent('methodsNav');
	
	getElement("apiTitle").innerHTML = data.methodName;
	var description = "";
	if( data.deprecated != null ){
		description += "<h2 style='color: red'>Method Deprecated: See method <a href='./api.htm?show=" + data.deprecated + "'>" + data.deprecated + "</a></h2>";
	}
	description += data.longDescription;
	getElement("apiMethodDescription").innerHTML = description;
	getElement("exampleCode").innerHTML = data.exampleUrl;
	
	generateParameters(data.params);
	
	getElement("jsWrapper").innerHTML = data.jsWrapper;
	
	if( data.liveExample ){
		generateJsonResponse(data.exampleUrl+"&mime=txt");
		generateXmlResponse(data.exampleUrl+"&format=xml&mime=txt&pretty=true");
	}else{
		generateFixedResponses(data.jsonExample, data.xmlExample);
	}
	generateErrorCodes(data.errorCodes);
	generateExampleError(data.exampleError+"&mime=txt");
	//generateExample(data.methodName);
}

function setMethodList(el, data){
	if(el != null){
		el.innerHTML = "";
		var methods = data.methods;
		for(var i = 0; i < methods.length; i++){
			var method = methods[i];
			var inner = "";
			inner += "<span id='alfrescoLi'>";
			if( method.deprecated != null ){
				inner += "<s>";
			}
			inner += "<b><a href='./api.htm?show=" + method.name + "' name='method'>" + method.name + "</a></b>";
			if( method.deprecated != null ){
				inner += "</s>";
			}
			inner += ": <i>" + method.description + "</i>";
			if( method.deprecated != null ){
				inner += " (See: <a href='./api.htm?show=" + method.deprecated + "' name='method'>" + method.deprecated + "</a>)";
			}
			inner += "</span><br />";
			el.innerHTML += inner;
		}
	}
}

function showActionScript(apiContent){
	apiContent.innerHTML = getApiContent('apiGenericMethodBody');
	getElement("apiTitle").innerHTML = "Cellblock.as";
	getElement("genericDescription").innerHTML = "ActionScript file to create your own Cellblock flash player.";
	getElement("genericUrlTitle").innerHTML = "Cellblock.as URL";	
	getElement("genericUrlDescription").innerHTML = "Include this ActionScript file in your flash file to make Cellblock API calls.";
	
	var url = BASE_URL + "/api/as/Cellblock.as";
	getElement("genericUrl").appendChild(document.createTextNode(url));
	
	getElement("genericCodeTitle").innerHTML = "Cellblock.as Code";
	
	if( !isIE() && !isOpera() ){
		url += "?mime=txt";	
	}
	
	getElement("genericCode").setAttribute("src", url);
	
	var genericLink = getElement("genericLink");
	genericLink.setAttribute("href", "api/as/Cellblock.as");
	genericLink.innerHTML = "Download Cellblock.as";
}

function showApiKey(apiContent){
	apiContent.innerHTML = getApiContent('apiGenericMethodBody');
	getElement("apiTitle").innerHTML = "API Key";
	getElement("genericDescription").innerHTML = getApiContent("apiKeyContent");
	getElement("genericUrlTitle").innerHTML = "Example";	
	getElement("genericUrlDescription").style.display = "none";
	
	var url = "http://www.cellblock.com/api/rest/?method=Logout&apiKey=http%3A%2F%2Fwww.cellblock.com";
	getElement("genericUrl").appendChild(document.createTextNode(url));
	
	getElement("genericCodeTitle").style.display = "none";
	getElement("genericCode").style.display = "none";
	getElement("genericLink").style.display = "none";
}

function showEmailAssistant(apiContent){
	apiContent.innerHTML = getApiContent('apiGenericMethodBody');
	getElement("apiTitle").innerHTML = "Cellblock Email Assistant";
	getElement("genericDescription").innerHTML = getApiContent('apiEmailAssistantContent');
	getElement("genericUrlTitle").style.display = "none";
	getElement("genericUrlDescription").style.display = "none";
	getElement("genericUrl").style.display = "none";
	getElement("genericCodeTitle").style.display = "none";
	getElement("genericCode").style.display = "none";
	getElement("genericLink").style.display = "none";
}

function showMethod(apiContent){
	apiContent.innerHTML = getApiContent('apiItemBody');
	getMethodData(showItem);
}

function showMime(apiContent){
	apiContent.innerHTML = getApiContent('apiGenericMethodBody');
	getElement("apiTitle").innerHTML = "Image and Video Content";
	getElement("genericDescription").innerHTML = getApiContent('apiMimeContent');
	getElement("genericUrlTitle").style.display = "none";
	getElement("genericUrlDescription").style.display = "none";
	getElement("genericUrl").style.display = "none";
	getElement("genericCodeTitle").style.display = "none";
	getElement("genericCode").style.display = "none";
	getElement("genericLink").style.display = "none";
}

function showRealm(apiContent){
	apiContent.innerHTML = getApiContent('apiGenericMethodBody');
	getElement("apiTitle").innerHTML = "Cellblock 'Realms'";
	getElement("genericDescription").innerHTML = getApiContent('apiRealmContent');
	getElement("genericUrlTitle").style.display = "none";
	getElement("genericUrlDescription").style.display = "none";
	getElement("genericUrl").style.display = "none";
	getElement("genericCodeTitle").style.display = "none";
	getElement("genericCode").style.display = "none";
	getElement("genericLink").style.display = "none";
}

function showUtil(apiContent){
        apiContent.innerHTML = getApiContent('apiGenericMethodBody');
        getElement("apiTitle").innerHTML = "Util.js";
        getElement("genericDescription").innerHTML = getApiContent("apiUtilContent");
        getElement("genericUrlTitle").innerHTML = "Util.js URL";
        getElement("genericUrlDescription").innerHTML = "Include this Javascript Url in your code to make the utility methods available.";

        var url = BASE_URL + "/api/js/Util.js";
        getElement("genericUrl").appendChild(document.createTextNode(url));

        getElement("genericCodeTitle").style.display = "none";

        if( !isIE() && !isOpera() ){
                url += "?mime=txt";
        }

        getElement("genericCode").style.display = "none";

        var genericLink = getElement("genericLink");
        genericLink.setAttribute("href", "api/js/Util.js");
        genericLink.innerHTML = "Download Util.js";
}

function showMethodList(apiContent, category){
        apiContent.innerHTML = getApiContent('apiGenericMethodBody');
		
		var displayCat = category;
		
		if( displayCat == ""){
					displayCat = "All";
		}
		
        getElement("apiTitle").innerHTML = "API Methods: " + displayCat;
		
		if( category == ""){
			category = null;
		}else{
			category = category.toLowerCase();	
		}
        
		GetPublicApiMethods(apiKey, category, function(data){
				setMethodList(getElement("genericDescription"), data);
			});
		
		getElement("genericUrlTitle").style.display = "none";
        getElement("genericUrlDescription").style.display = "none";
        getElement("genericUrl").style.display = "none";
        getElement("genericCodeTitle").style.display = "none";
        getElement("genericCode").style.display = "none";
		getElement("genericLink").style.display = "none";
}


function showAQL(apiContent){
        apiContent.innerHTML = getApiContent('apiGenericMethodBody');
        getElement("apiTitle").innerHTML = "Attribute Query Language";
        getElement("genericDescription").innerHTML = getApiContent("apiAQLContent");
        getElement("genericUrlTitle").style.display = "none";
        getElement("genericUrlDescription").style.display = "none";

        getElement("genericUrl").style.display = "none";

        getElement("genericCodeTitle").style.display = "none";

        getElement("genericCode").style.display = "none";

        var genericLink = getElement("genericLink");
        genericLink.setAttribute("href", "api/wsdl/");
        genericLink.style.display = "none";
}

function showWSDL(apiContent){
        apiContent.innerHTML = getApiContent('apiGenericMethodBody');
        getElement("apiTitle").innerHTML = "WSDL Support";
        getElement("genericDescription").innerHTML = getApiContent("apiWSDLContent");
        getElement("genericUrlTitle").innerHTML = "WSDL URL";
        getElement("genericUrlDescription").innerHTML = "Include this URL in your application to access the WSDL.";

        var url = BASE_URL + "/api/wsdl/";
        getElement("genericUrl").appendChild(document.createTextNode(url));

        getElement("genericCodeTitle").style.display = "none";

        if( !isIE() && !isOpera() ){
                url += "?mime=txt";
        }

        getElement("genericCode").style.display = "none";

        var genericLink = getElement("genericLink");
        genericLink.setAttribute("href", "api/wsdl/");
        genericLink.innerHTML = "See WSDL Descriptor";
}

/*function setWrapperMethods(apiContent, data){
	var methods = data.methods;
	for(var i = 0; i < methods.length; i++){
		var methodName = methods[i][0];
		GetDocumentation(apiKey, methodName, function(data){
			apiContent.innerHTML += "<span id='alfrescoLi'><a href='api.htm?show=" + methodName + "'>" + data.jsWrapper.substr(8, data.jsWrapper.indexOf("{") - 9) + ";</a></span><br />";	
		});
	}
	apiContent.innerHTML += "<br />";
}*/

function showWrapper(apiContent){
        apiContent.innerHTML = getApiContent('apiGenericMethodBody');
        getElement("apiTitle").innerHTML = "Wrapper.js";
        getElement("genericDescription").innerHTML = getApiContent("apiWrapperContent");
		
		
		/*GetPublicApiMethods(apiKey, null, function(data){
				setWrapperMethods(getElement("genericDescription"), data);
		});*/
		
        getElement("genericUrlTitle").innerHTML = "Wrapper.js URL";
        getElement("genericUrlDescription").innerHTML = "Include this Javascript Url in your code to make the wrapper methods available.";

        var url = BASE_URL + "/api/js/Wrapper.js";
        getElement("genericUrl").appendChild(document.createTextNode(url));

        getElement("genericCodeTitle").style.display = "none";

        if( !isIE() && !isOpera() ){
                url += "?mime=txt";
        }

        getElement("genericCode").style.display = "none";

        var genericLink = getElement("genericLink");
        genericLink.setAttribute("href", "api/js/Wrapper.js");
        genericLink.innerHTML = "Download Wrapper.js";
}



function subscribeSubmit(){
	var email = getElement("subscribeEmail").value;
	cellBlockController.addToDevelopersEmailList(email, {
		callback:function(data) {
			alert(data);
		},
		async:false
	});
}

function unsubscribeSubmit(){
	var email = getElement("unsubscribeEmail").value;
	cellBlockController.removeFromDevelopersEmailList(email,  {
		callback:function(data) {
			alert(data);
		},
		async:false
	});
}