﻿var lastClickedMenuItem;

function insite_getHttpResponse(method, strReq, data) {
	var oXML;
	var result = "";
	
	if (window.XMLHttpRequest) {
		oXML = new XMLHttpRequest();
		oXML.open(method, strReq, false);
		if (data != null) {
			oXML.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
		}
		oXML.send(data);
		result = oXML.responseText;
	} else if (window.ActiveXObject) {
		oXML = new ActiveXObject("Microsoft.XMLHTTP");
		oXML.open(method, strReq, false);
		if (data != null) {
			oXML.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
			oXML.send(data);
		} else {
			oXML.send();
		}
		result = oXML.responseText;
	}
	
	return result;
}

function insite_getDocumentTitle(cmURL, proxyURL, docID, version) {
	var strReq;
	var qry;

	strReq = proxyURL;
	strReq += "?url=" + cmURL;
	if (strReq.substr(strReq.length-1, 1) != "/") strReq += "/";
	strReq += "getdocument.aspx";
	
	qry = "DocID=" + docID;
	if (version != null) qry += "&version=" + version;
	qry += "&mode=gettitle";
	qry += "&now=" + encodeURIComponent(Date());
	
	strReq += "&qry=" + encodeURIComponent(qry);

	return insite_getHttpResponse("GET", strReq, null);
}

function insite_getDocumentContent(cmURL, proxyURL, docID, version) {
	var strReq;
	var qry;

	strReq = proxyURL;
	strReq += "?url=" + cmURL;
	if (strReq.substr(strReq.length-1, 1) != "/") strReq += "/";
	strReq += "getdocument.aspx";
	
	qry = "DocID=" + docID;
	if (version != null) qry += "&version=" + version;
	qry += "&mode=content&keeptags=true&keepectags=true";
	qry += "&now=" + encodeURIComponent(Date());
	
	strReq += "&qry=" + encodeURIComponent(qry);

	return insite_getHttpResponse("GET", strReq, null);
}

function insite_getDocumentScript(cmURL, proxyURL, docID, version) {
	var strReq;
	var qry;

	strReq = proxyURL;
	strReq += "?url=" + cmURL;
	if (strReq.substr(strReq.length-1, 1) != "/") strReq += "/";
	strReq += "getdocument.aspx";
	
	qry = "DocID=" + docID;
	if (version != null) qry += "&version=" + version;
	qry += "&mode=script";
	qry += "&now=" + encodeURIComponent(Date());
	
	strReq += "&qry=" + encodeURIComponent(qry);

	return insite_getHttpResponse("GET", strReq, null);
}

function insite_getDocumentStatus(cmURL, proxyURL, docID) {
	var strReq;
	var qry;

	strReq = proxyURL;
	strReq += "?url=" + cmURL;
	if (strReq.substr(strReq.length-1, 1) != "/") strReq += "/";
	strReq += "getdocument.aspx";
	
	qry = "DocID=" + docID;
	qry += "&mode=getstatus";
	qry += "&now=" + encodeURIComponent(Date());
	
	strReq += "&qry=" + encodeURIComponent(qry);

	return insite_getHttpResponse("GET", strReq, null);
}

/*
function insite_getDocumentFormDefinitionXML(cmURL, proxyURL, docID, version) {
	var strReq;
	var qry;

	strReq = proxyURL;
	strReq += "?url=" + cmURL;
	if (strReq.substr(strReq.length-1, 1) != "/") strReq += "/";
	strReq += "getdocument.aspx";
	
	qry = "DocID=" + docID;
	if (version != null) qry += "&version=" + version;
	qry += "&mode=getformdocumentxmldefinition";
	qry += "&now=" + encodeURIComponent(Date());
	
	strReq += "&qry=" + encodeURIComponent(qry);

	return insite_getHttpResponse("GET", strReq, null);
}

function insite_isFormDocument(HTML) {
	var result = false;
	
	if (HTML.toLowerCase().indexOf("<form") > 0) {
		result = true;
	}

	return result;
}
*/

function insite_checkOutDocument(cmURL, proxyURL, docId) {
    var strReq;
    var qry;
    var checkOutResult;
    
    strReq = proxyURL;
    strReq += "?url=" + cmURL;
    if (strReq.substr(strReq.length-1, 1) != "/") strReq += "/";
    strReq += "setdocument.aspx";
    
    qry = "DocID=" + docId;
    qry += "&action=checkout&now=" + encodeURIComponent(Date());
    
    strReq += "&qry=" + encodeURIComponent(qry);
    
    checkOutResult = insite_getHttpResponse("GET", strReq, null);
    
    if (checkOutResult != "OK") {
        alert("ERROR: " + checkOutResult);
    }
    
    return checkOutResult;
}

function insite_checkInDocument(cmURL, proxyURL, docId) {
    var strReq;
    var qry;
    var checkInResult;
    
    strReq = proxyURL;
    strReq += "?url=" + cmURL;
    if (strReq.substr(strReq.length-1, 1) != "/") strReq += "/";
    strReq += "setdocument.aspx";
    
    qry = "DocID=" + docId;
    qry += "&action=checkin&now=" + encodeURIComponent(Date());
    
    strReq += "&qry=" + encodeURIComponent(qry);
    
    checkInResult = insite_getHttpResponse("GET", strReq, null);
    
    if (checkInResult != "OK") {
        alert("ERROR: " + checkInResult);
    }
    
    return checkInResult;
}

function insite_approveDocument(cmURL, proxyURL, docId) {
    var strReq;
    var qry;
    var approveResult;
    
    strReq = proxyURL;
    strReq += "?url=" + cmURL;
    if (strReq.substr(strReq.length-1, 1) != "/") strReq += "/";
    strReq += "setdocument.aspx";
    
    qry = "DocID=" + docId;
    qry += "&action=approve&now=" + encodeURIComponent(Date());
    
    strReq += "&qry=" + encodeURIComponent(qry);
    
    approveResult = insite_getHttpResponse("GET", strReq, null);
    
    if (approveResult != "OK") {
        alert("ERROR: " + approveResult);
    }
    
    return approveResult;
}

function insite_loadRawContentFromCM(cmURL, proxyURL, docId, version, titleContainer, contentContainer, checkOut) {
    var title = insite_getDocumentTitle(cmURL, proxyURL, docId, version);
    var content = insite_getDocumentContent(cmURL, proxyURL, docId, version);
    var docStatus = insite_getDocumentStatus(cmURL, proxyURL, docId);

    if (titleContainer != null) {
        titleContainer.innerHTML = title;
    }
    if (contentContainer != null) {
        contentContainer.innerHTML = content;
    }
    
    // Checkout document
    if (checkOut) {
        if ((titleContainer != null) || (contentContainer != null)) {
            if (docStatus != "CHECKEDOUT") {
                insite_checkOutDocument(cmURL, proxyURL, docId);
            }
        }
    }
}

function insite_saveRawContentToCM(cmURL, proxyURL, docId, version, titleContainer, contentContainer, approveAfterSave) {
    var title = "";
    var content = "";
    var strReq;
    var qry;
    var data = "";
    var saveResult;
    var cmResult;
    
    window.status = "SAVING...";
    
    if (titleContainer != null) {
        title = titleContainer.innerHTML;
    }
    if (contentContainer != null) {
        content = contentContainer.innerHTML;
    }
    
    strReq = proxyURL;
    strReq += "?url=" + cmURL;
    if (strReq.substr(strReq.length-1, 1) != "/") strReq += "/";
    strReq += "setdocument.aspx";
    
    qry = "DocID=" + docId;
    if (version != null) qry += "&version=" + version;
    qry += "&action=saveinsite&now=" + encodeURIComponent(Date());
    
    strReq += "&qry=" + encodeURIComponent(qry);
    
    if (titleContainer != null) data = "txtTitle=" + encodeURIComponent(title);
    if (data != "") data += "&";
    if (contentContainer != null) data += "txtContent=" + encodeURIComponent(content);

    saveResult = insite_getHttpResponse("POST", strReq, data);

    if (saveResult == "OK") {
        cmResult = insite_checkInDocument(cmURL, proxyURL, docId);
        
        if ((cmResult == "OK") && approveAfterSave) {
            cmResult = insite_approveDocument(cmURL, proxyURL, docId);
        }
        
        if (cmResult != "OK") {
            alert("ERROR: " + cmResult);
        }
        
        insite_loadRawContentFromCM(cmURL, proxyURL, docId, version, titleContainer, contentContainer, false);
        insite_clearCache(proxyURL, docId, 0, 0);
    } else {
        alert("ERROR: " + saveResult);
    }
    
    window.status = "";
}

function insite_setEditable(container) {
    if (container != null) {
        container.setAttribute('contentEditable', 'true');
    }
}

function insite_setReadOnly(container) {
    if (container != null) {
        container.setAttribute('contentEditable', 'false');
    }
}

function insite_clearCache(proxyURL, docId, catId, docTypeId) {
    var strReq = proxyURL.replace("proxy", "clearcache")
    
    strReq += "?DocID=" + docId;
    if (catId > 0) strReq += "&CatID=" + catId;
    if (docTypeId > 0) strReq += "&DocTypeID=" + docTypeId;
    strReq +="&now=" + encodeURIComponent(Date());
    
    insite_getHttpResponse("GET", strReq, null);
}

function EditDocumentContextMenu_onItemSelect(sender, eventArgs) {
    var selectedItem = eventArgs.get_item();
    var value = selectedItem.get_value();
    var menu = selectedItem.get_parentMenu(); 
    var saveItem = menu.findItemByProperty("Value", "SAVE");
    var loadItem = menu.findItemByProperty("Value", "LOAD");
    
    switch (value) {
        case "LOAD" :
            // Disable the edit text only link
            selectedItem.set_enabled(false);
            // Enable the save to CM link
            saveItem.set_enabled(true);
            break;
        case "SAVE" :
            // Disable the save link
            selectedItem.set_enabled(false);
            // Enable the load link
            loadItem.set_enabled(true);
            break;
        default :
    } 
}

function EditMenuContextMenu_onItemSelect(sender, eventArgs) {
    var selectedItem = eventArgs.get_item();
    var value = selectedItem.get_value();
    
    if (value.substring(0, 11) == "ADDCATEGORY") {
        var tempArray;
        var catNameTextFieldId;
        var addCategoryContainerId;
        
        tempArray = value.split(",");
        catNameTextFieldId = tempArray[2];
        addCategoryContainerId = tempArray[3];
        
        document.getElementById(addCategoryContainerId).style.display = "block";
        document.getElementById(catNameTextFieldId).focus();
        document.getElementById(catNameTextFieldId).select();
    }
    
    // Store a reference to the item so we can get it when the Add nw category buton is clicked
    lastClickedMenuItem = selectedItem;
}

function addCategory(proxyURL, addButton, lang) {
    var selectedItem = lastClickedMenuItem;
    var value = selectedItem.get_value();
    
    if (value.substring(0, 11) == "ADDCATEGORY") {
        var tempArray;
        var parentId;
        var catNameTextFieldId;
        var addCategoryContainerId;
        var lang;
        var strReq;
        var response;
        
        tempArray = value.split(",");
        parentId = tempArray[1];
        catNameTextFieldId = tempArray[2];
        addCategoryContainerId = tempArray[3];
        lang = tempArray[4];
        
        // Disable the add category button
        addButton.className = "InSiteButtonDisabled";
        addButton.enabled = false;
        
        switch (lang) {
            case "sv" :
                window.status = "Skapar ny kategori... Var god vänta...";
                break;
          
            case "fi" :
                window.status = "Uusi kategorian luominen menossa. Ole hyvä ja odota...";
                break;
          
            default:
                window.status = "Creating new category... Please wait...";
                break;
        }
        
        // Perform the action        
        strReq = proxyURL.replace("proxy", "add_category");
        strReq += "?ParentID=" + parentId;
        strReq += "&Name=" + encodeURIComponent(document.getElementById(catNameTextFieldId).value);
        strReq += "&Lang=" + lang;
        strReq += "&sync=false" ;
        
        response = insite_getHttpResponse("GET", strReq, null);
        if (response.substring(0, 3)  == "OK:") {
            // Clear the textbox
            document.getElementById(catNameTextFieldId).value = "";
            // Success, so we clear the category cache
            insite_clearCache(proxyURL, 0, parentId, 0);
            
            // Synchronize document links async
            tempArray = response.split(":");
            catId = tempArray[1];
            response = tempArray[2];
            
            strReq = proxyURL.replace("proxy", "add_category");
            strReq += "?CatID=" + catId;
            strReq += "&Lang=" + lang;
            strReq += "&sync=true" ;
            
            setTimeout('insite_getHttpResponse("GET", "' + strReq + '", null);', 0);
        } else {
            // An error occured, show the text as-is
        }

        // Enable the add category button again
        addButton.enabled = true;
        addButton.className = "InSiteButton";
        window.status = "";

        // Show result to user
        alert(response);
        
        hideAddCategoryPanel(document.getElementById(addCategoryContainerId));
    }
}

function hideAddCategoryPanel(container) {
    container.style.display = "none";   
}
