/**
 * FileStreamer
 * Copyright (c) 2006 MakProject.com. All Rights Reserved.
 * http://www.filestreamer.makproject.com
 *
 * Authors:
 *  Toni Rajkovski <rtoni@makproject.com>
 *  Vladimir Jakimov <vjakimov@makproject.com>
 */
 

/**
 *	XftpCore Class
 *
 */
function XftpCore(urlParam, pageParam){
	this.page = pageParam;
	this.URL = urlParam;
	if(document.all) this.isIE = true;
}

XftpCore.prototype.page = "";
XftpCore.prototype.URL = "";
XftpCore.prototype.URLFrontEnd = "";
XftpCore.prototype.URLFrontEndHelp = "";
XftpCore.prototype.URLBackEnd = "";
XftpCore.prototype.URLBackEndHelp = "";
XftpCore.prototype.URLPublicService = "";
XftpCore.prototype.contentElementId = ""; // main content DIV tag
XftpCore.prototype.isCollapsed = "true";     // collapsed or expanded
XftpCore.prototype.skin = "skin_blue/";     // skin
XftpCore.prototype.loggedUser = "";     // Logged User
XftpCore.prototype.loggedUserId = "";     // Logged User Id
XftpCore.prototype.loggedUserDisplay = "";     // DisplayName

XftpCore.prototype.categoryDisplayName = "";
XftpCore.prototype.categoryDisplayNamePl = "";
XftpCore.prototype.subCategoryDisplayName = "";
XftpCore.prototype.subCategoryDisplayNamePl = "";
XftpCore.prototype.userDisplayName = "";
XftpCore.prototype.userDisplayNamePl = "";

XftpCore.prototype.selectedCategoryId = 0;
XftpCore.prototype.selectedSubCategoryId = 0;
XftpCore.prototype.selectedItemId = 0;
XftpCore.prototype.modifyItemId = 0;
XftpCore.prototype.selectedAllowUploads = 'no';

XftpCore.prototype.mainFrame = null;     
XftpCore.prototype.clientBoxFrame = null;     
XftpCore.prototype.folderBoxFrame = null;
XftpCore.prototype.itemBoxFrame = null;

XftpCore.prototype.activePage = "";
XftpCore.prototype.isIE = false;


XftpCore.prototype.initialize = function(){
    this.URLPublicService = this.URL + "common/httpservices/public.php";
    
    var xmlDoc = this.getDocumentFromServer(this.URLPublicService + "?operation=get_init_values&page=" + this.page);
    this.URLFrontEnd = this.URL + "frontend/";
    this.URLFrontEndHelp = this.URL + "frontend_help/";
    this.URLBackEnd = this.URL + "backend/";
    this.URLBackEndHelp = this.URL + "backend_help/";
    
    this.contentElementId = "contentId";
    this.isCollapsed = this.getTagValue("/root/global_values/is_collapsed", xmlDoc);
    this.loggedUser = this.getTagValue("/root/global_values/logged_user", xmlDoc);
    this.loggedUserId = this.getTagValue("/root/global_values/logged_user_id", xmlDoc);
    this.loggedUserDisplay = this.getTagValue("/root/global_values/logged_user_display", xmlDoc);

    if (this.page == "frontend") this.skin = this.getTagValue("/root/global_values/frontend_skin", xmlDoc);
    else if (this.page == "backend") this.skin = this.getTagValue("/root/global_values/backend_skin", xmlDoc);
    else this.skin = "skin_blue/"

    this.categoryDisplayName = this.getTagValue("/root/display_values/category_display", xmlDoc);
    this.categoryDisplayNamePl = this.getTagValue("/root/display_values/category_display_pl", xmlDoc);
    this.subCategoryDisplayName = this.getTagValue("/root/display_values/subcategory_display", xmlDoc);
    this.subCategoryDisplayNamePl = this.getTagValue("/root/display_values/subcategory_display_pl", xmlDoc);
    this.userDisplayName = this.getTagValue("/root/display_values/user_display", xmlDoc);
    this.userDisplayNamePl = this.getTagValue("/root/display_values/user_display_pl", xmlDoc);

    this.selectedCategoryId = this.getTagValue("/root/global_values/selected_top_level_category_id", xmlDoc);
    this.selectedSubCategoryId = this.getTagValue("/root/global_values/selected_category_id", xmlDoc);
    this.selectedItemId = this.getTagValue("/root/global_values/selected_item_id", xmlDoc);
    this.selectedAllowUploads = this.getTagValue("/root/global_values/selected_category_allows_uploads", xmlDoc);
    
    this.sendVariables(this.page);
};


XftpCore.prototype.getBasicXMLDocument = function(){
    var xmlString = "<root>";
    xmlString += "<url>" + this.URL + "</url>";
    xmlString += "<is_collapsed>" + this.isCollapsed + "</is_collapsed>";
    xmlString += "<skin>" + this.skin + "</skin>";
    xmlString += "<logged_user>" + this.loggedUser + "</logged_user>";
    xmlString += "<logged_user_id>" + this.loggedUserId + "</logged_user_id>";
    xmlString += "<logged_user_display>" + this.loggedUserDisplay + "</logged_user_display>";

    xmlString += "<category_display>" + this.categoryDisplayName + "</category_display>";
    xmlString += "<category_display_pl>" + this.categoryDisplayNamePl + "</category_display_pl>";
    xmlString += "<subcategory_display>" + this.subCategoryDisplayName + "</subcategory_display>";
    xmlString += "<subcategory_display_pl>" + this.subCategoryDisplayNamePl + "</subcategory_display_pl>";
    xmlString += "<user_display>" + this.userDisplayName + "</user_display>";
    xmlString += "<user_display_pl>" + this.userDisplayNamePl + "</user_display_pl>";
    
    xmlString += "<selected_top_level_category_id>" + this.selectedCategoryId + "</selected_top_level_category_id>";
    xmlString += "<selected_category_id>" + this.selectedSubCategoryId + "</selected_category_id>";
    xmlString += "<selected_item_id>" + this.selectedItemId + "</selected_item_id>";

    xmlString += "<selected_allow_uploads>" + this.selectedAllowUploads + "</selected_allow_uploads>";

    xmlString += "</root>";

    var xmlDoc = this.returnXmlDocumentFromString(xmlString);
    return xmlDoc;
};


XftpCore.prototype.getDocumentFromServer = function(xmlDocSrc){
    var xmlDoc = Sarissa.getDomDocument();
    xmlDoc.async = false; 
    xmlDoc.load(xmlDocSrc);
    return xmlDoc;
}

XftpCore.prototype.displayHtmlInElement = function(str, element){
    element.innerHTML = str;
}

XftpCore.prototype.getStringFromDocument = function(xslDocumentSrc, xmlDocument){
    var xslDocument = this.getDocumentFromServer(xslDocumentSrc);
    
    var xsltProc  = new XSLTProcessor();
    xsltProc.importStylesheet(xslDocument);
    fragment = xsltProc.transformToDocument(xmlDocument);

    if (Sarissa.getParseErrorText(fragment) != Sarissa.PARSED_OK) {
        alert ("err = " +   Sarissa.getParseErrorText(fragment));
    };
    var str = new XMLSerializer().serializeToString(fragment);
    return str;
}

XftpCore.prototype.displayHtml = function(xslDocumentSrc, xmlDocument, elementId){
    var str = this.getStringFromDocument(xslDocumentSrc, xmlDocument);
    var element = document.getElementById(elementId);
    this.displayHtmlInElement(str, element);
};

XftpCore.prototype.displayHtmlFromServer = function(xslDocumentSrc, xmlDocumentSrc, elementId){
    var xmlDocument = this.getDocumentFromServer(xmlDocumentSrc);
    this.displayHtml(xslDocumentSrc, xmlDocument, elementId);
};

XftpCore.prototype.sendVariables = function(page){
    var query = "?operation=send_variables&page="+page;
    query += "&selected_top_level_category_id=" + this.selectedCategoryId;
    query += "&selected_category_id=" + this.selectedSubCategoryId;
    query += "&selected_item_id=" + this.selectedItemId;
    query += "&is_collapsed=" + this.isCollapsed;
    xmlDoc = this.getDocumentFromServer(this.URLPublicService + query);
    this.selectedAllowUploads = this.getTagValue("/root/selected_category_allows_uploads", xmlDoc);
}

/*
 *   XML CORE
 */
 
XftpCore.prototype.getTagValue = function(tagPath, node){
    if(tagPath.charAt(0) == "/")
        tagPath = tagPath.substr(1);
    nextBreak = tagPath.indexOf("/");
    if(nextBreak == -1){
        element = node.getElementsByTagName(tagPath).item(0);
        if(element.childNodes.length > 0)
            return element.childNodes.item(0).data;
        else return "";
    } else {
        elementName = tagPath.substr(0, nextBreak);
        var element;
        if(elementName == "root"){
            element = node.documentElement;
        }else{
            for(var i=0; i < node.childNodes.length; i++){
                element = node.childNodes[i];
                if(element.nodeName == elementName)
                    break;
            }
        }
        tagPath = tagPath.substr(nextBreak + 1);
        return this.getTagValue(tagPath, element);
    }
}

XftpCore.prototype.mergeXMLDocuments = function(doc1, doc2){
    doc1Root = doc1.documentElement;
    doc2Root = doc2.documentElement;
    for (var i=0; i < doc2Root.childNodes.length; i++) {
        elem = doc2Root.childNodes[i];
        elemName = elem.nodeName;
        newElement = elem.cloneNode(true);
        doc1Root.appendChild(newElement);
    }
    return doc1;
}

XftpCore.prototype.returnXmlDocumentFromString = function(str){
    var xmlDocument = Sarissa.getDomDocument();
    xmlDocument = (new DOMParser()).parseFromString(str, "text/xml");
    return xmlDocument;
}

XftpCore.prototype.createInfoXml = function(info){
    var xml = "<root>";
    xml += "<info>" + info + "</info>";
    xml += "</root>";
    return xml;
}

XftpCore.prototype.hideClientBox = function(){
	var category_show = window.frames.parent.document.getElementById('CategoryShow');
  	var category_box = window.frames.parent.document.getElementById('CategoryBox');
  			
  	category_show.style.visibility = "hidden";
  	category_show.style.position = "absolute";
  	category_show.style.overflow = "hidden";
  	  	
  	category_box.style.visibility = "hidden";
  	category_box.style.position = "absolute";
  	category_box.style.overflow = "hidden";
}

XftpCore.prototype.showClientBox = function(){
  	var category_show = window.frames.parent.document.getElementById('CategoryShow');
  	var category_box = window.frames.parent.document.getElementById('CategoryBox');
  		
  	category_show.style.visibility = "visible";
  	category_show.style.position = "static";
  	category_show.style.overflow = "visible";
  	  	
  	category_box.style.visibility = "visible";
  	category_box.style.position = "static";
  	category_box.style.overflow = "visible";
}