/*
 * Template Kingdom Configuration
 */
var INT_TK_AFF_ID = 815,
    INT_TK_WEBROOT = 'http://www.templatekingdom.com', //'http://www.templatekingdom.com',
    INT_TK_DATA_API_PATH = INT_TK_WEBROOT + '/feeds';
    INT_TK_DATA_API_URL = INT_TK_DATA_API_PATH + '/js.php';
/***************************************
 * Local Configuration
 ***************************************/
/**
 * You can control how many templates are displayed in a row. 
 * you will need to tweak the HTML and/or the css though.
 */
var numTemplatesInARow = 3;
var confTemplateListPageUrl = 'index.html';

/*
 * System Valiables
 */
var blnCategoryListDisplayed = false,
    blnTemplateTypeListDisplayed = false,
    blnMainContentDisplayed = false,
    blnTemplateListDisplayed = false,
    blnFAQListDisplayed = false,
    blnCurrentUriInitialized = false,
    blnMenuCorrected = false,
    currentUri = {},
    currentSearchParams = {};
    aHTMLContent = {};

function initCurrentUri()
{
    if (!blnCurrentUriInitialized) {
        currentUri = INT.Uri.parse(location.href);
        currentSearchParams = currentUri.queryKey;
        currentUri.pageType = null;
        currentUri.contentId = null;
        blnCurrentUriInitialized = true;
        //INT.debugObject(currentUri);
    }
}

function IncludeAffiliateData(options)
{
    initCurrentUri();
    INT.Uri.setTkDataApiUrl(INT_TK_DATA_API_URL);// Forward Compatibility
    dataUrl = INT.Uri.makeUrlTkDataApi(options);
    INT.Loader.include(dataUrl);
}

function IncludeDataCategoriesAndTypes()
{
    initCurrentUri();
    var oTKDataOptions = {
        manager: 'TemplateCategories',
        tkp: INT_TK_AFF_ID,
        host: currentUri.host
    };
    IncludeAffiliateData(oTKDataOptions);
    var oTKDataOptions = {
        manager: 'TemplateTypes',
        tkp: INT_TK_AFF_ID,
        host: currentUri.host
    };
    IncludeAffiliateData(oTKDataOptions);
}

function IncludeDataFAQList()
{
    //INT.logMessage('Including the FAQ Data from TK');
    initCurrentUri();
    currentUri.pageType = 'FAQ';
    var oTKDataOptions = {
        module: 'faq',
        manager: 'FAQ',
        tkp: INT_TK_AFF_ID,
        host: currentUri.host
    };
    IncludeAffiliateData(oTKDataOptions);
}
function IncludeContent(contentId)
{
    //INT.logMessage('Including the Content from TK');
    initCurrentUri();
    currentUri.pageType = 'Content';
    currentUri.contentId = contentId;
    var oTKDataOptions = {
        manager: contentId,
        tkp: INT_TK_AFF_ID,
        host: currentUri.host
    };
    IncludeAffiliateData(oTKDataOptions);
}

function IncludeDataTemplateList()
{
    initCurrentUri();
    currentUri.pageType = 'Templates';
    var oTemplateListOptions = {
        manager: 'Templates',
        templateType: 'web-templates',
        perPage: 15,
        pageID: 1,
        tkp: INT_TK_AFF_ID,
        host: currentUri.host
    };
    for (var searchKey in currentSearchParams) {
        if (currentSearchParams[searchKey] != '') {
            switch(searchKey) {
                case 'category' :
                case 'templateType' :
                case 'priceLowerBound' :
                case 'priceUpperBound' :
                case 'templateCode' :
                case 'pageID' :
                    oTemplateListOptions[searchKey] = currentSearchParams[searchKey];
                    break;

                default:
                    break;
            }
        }
    }
    //INT.debugObject(oTemplateListOptions);
    IncludeAffiliateData(oTemplateListOptions);
}

function updateContent()
{
    initCurrentUri();
    INT.Uri.setTemplateListUrl(confTemplateListPageUrl);
    //INT.logMessage('Update call ensure that all data is loaded');
    var blnCategoryListLoaded = (Boolean(typeof aAllTemplateCategories != 'undefined' && aAllTemplateCategories));
    var blnTemplateTypeListLoaded = (Boolean(typeof aAllTemplateTypes != 'undefined' && aAllTemplateTypes));    
    var blnPagedTemplateListLoaded = (Boolean(typeof aPagedTemplateList != 'undefined' && aPagedTemplateList));    
    var blnFAQListLoaded = (Boolean(typeof aAllFaqs != 'undefined' && aAllFaqs));
    var blnContentLoaded = (Boolean(currentUri.contentId && typeof aHTMLContent[currentUri.contentId] != 'undefined' && aHTMLContent[currentUri.contentId]));
    if (!blnCategoryListDisplayed && blnCategoryListLoaded) {
		displayCategoryList();
    } else {
        //INT.logMessage('Can not display Categories data is not loaded');
    }

    if (!blnTemplateTypeListDisplayed && blnTemplateTypeListLoaded) {
        displayTemplateTypes();
    } else {
        //INT.logMessage('Can not display Template Type List, data is not loaded');
    }

    if (!blnMainContentDisplayed) {
        switch(currentUri.pageType) {
            case 'Templates' :
                if (!blnTemplateListDisplayed && blnPagedTemplateListLoaded) {
                    displayTemplateList();
                } else {
                    //INT.logMessage('Can not display Templates.. data is not loaded');
                }
            break;
    
            case 'FAQ' :
                if (!blnFAQListDisplayed && blnFAQListLoaded) {
                    displayFAQList();
                } else {
                    //INT.logMessage('Can not display Templates.. data is not loaded');
                }
            break;
    
            case 'Content' :
                if (blnContentLoaded) {
                    displayContent();
                } else {
                    //INT.logMessage('Can not display Templates.. data is not loaded');
                }
            break;
        }
    }
    if (blnCategoryListDisplayed && blnTemplateTypeListDisplayed && blnMainContentDisplayed) {
        //INT.logMessage('clearing the Time Out');
        window.clearInterval(updaterProcessId);
    } else {
        //INT.logMessage('Will come back');
    }
    return;
}

function displayCategoryList()
{
    //INT.logMesage('displaying Category List');
  	var objUiCategoryList = document.getElementById('categorylist');
    var objUiSelectCategory = document.search.category;
    var objUiCategoryListItem = null;
    var objUiCategoryAnchor = null;
    var objDataTemplateCategory = null;
    var blnTemplateCategorySelected = false;
    for (var templateCategoryId in aAllTemplateCategories) {
        objDataTemplateCategory = aAllTemplateCategories[templateCategoryId];
        blnTemplateCategorySelected = objDataTemplateCategory.sef_category_alias == currentSearchParams.category;
  		objUiCategoryListItem = document.createElement("li");
        objUiCategoryAnchor = document.createElement("a");
        var oCategoryUrlParams = {
            category: objDataTemplateCategory.sef_category_alias,
            templateType: 'web-templates'
        }
        objUiCategoryAnchor.setAttribute('href', INT.Uri.makeUrlQueryString(oCategoryUrlParams));
        objUiCategoryAnchor.innerHTML = objDataTemplateCategory.category_title 
                                            + ' (' + objDataTemplateCategory.quantity + ')';
        objUiCategoryListItem.appendChild(objUiCategoryAnchor);
  		objUiCategoryList.appendChild(objUiCategoryListItem);
        objUiSelectOptionCategory = new Option(objDataTemplateCategory.category_title, 
                                            objDataTemplateCategory.sef_category_alias,
                                            blnTemplateCategorySelected);
        objUiSelectCategory.options[objUiSelectCategory.options.length] = objUiSelectOptionCategory;
    }
    blnCategoryListDisplayed = true;
}

function displayTemplateTypes()
{
    //INT.logMesage('displaying Category List');
    var objUiULTemplateTypeList = document.getElementById('templateTypeList');
    var objUiSelectTemplateType = document.search.templateType;
    var objDataTemplateType = null;
    var blnTemplateTypeSelected = false;
    var aUiULChildTemplateTypes = new Array();
    objUiSelectTemplateType.options.length = 0;
    for (var templateTypeId in aAllTemplateTypes) {
        objDataTemplateType = aAllTemplateTypes[templateTypeId];
        
        // Populate the Select Drop Down
        blnTemplateTypeSelected = objDataTemplateType.sef_title_alias == currentSearchParams.templateType;
        spacer = '';
        level = parseInt(objDataTemplateType.level_id, 10) - 1;
        while (level-- > 0) {
            spacer += '   ';
        }
        templateTypeTitle = spacer + objDataTemplateType.title;
        objUiSelectOptionTemplateType = new Option(templateTypeTitle, 
                                            objDataTemplateType.sef_title_alias,
                                            blnTemplateTypeSelected);
        objUiSelectTemplateType.options[objUiSelectTemplateType.options.length] = objUiSelectOptionTemplateType;
        
        // Now work for the Template Type Tree
        levelId = parseInt(objDataTemplateType.level_id, 10);
        var oTemplateTypeUrlParams = {
            templateType: objDataTemplateType.sef_title_alias
        }
        objUiLITemplateType = document.createElement('li');
        if (levelId == 1) {
            continue;
        }
        objUiAnchorTemplateType = document.createElement("a");
        objUiAnchorTemplateType.setAttribute('href', INT.Uri.makeUrlQueryString(oTemplateTypeUrlParams));
        objUiAnchorTemplateType.innerHTML = objDataTemplateType.title;
        objUiLITemplateType.appendChild(objUiAnchorTemplateType);
        
        if (levelId == 2) {
            objUiULChildTemplateTypes = document.createElement('ul');
            objUiLITemplateType.appendChild(objUiULChildTemplateTypes);
            objUiULTemplateTypeList.appendChild(objUiLITemplateType);
            aUiULChildTemplateTypes[templateTypeId] = objUiULChildTemplateTypes;
        }
        
        if (levelId == 3) {
            aUiULChildTemplateTypes[objDataTemplateType.parent_id].appendChild(objUiLITemplateType);
        }
    }
    correctTreeMenu();
    blnTemplateTypeListDisplayed = true;
}

function displayTemplateList()
{
    //INT.logMesage('displaying Template List');
    var objDataTemplateItem = null;
    var objUiTemplateList = document.getElementById('tblTemplateList');
    //INT.debugObject(objUiTemplateList);
    var objUiCurrentRow = null;
    var objUiTemplateItem = null;
    var templateCount = 0;
    var aTemplateList = aPagedTemplateList.data;
    var resultCount = parseInt(aPagedTemplateList.resultCount);
    for (var templateId in aTemplateList) {
        templateCount++;
        // Create a new Row if this is the last item for the row
        if ((templateCount - 1) % numTemplatesInARow == 0) {
            objUiCurrentRow = objUiTemplateList.insertRow(objUiTemplateList.rows.length);
        }
        
        objDataTemplateItem = aTemplateList[templateId];
        objUiCellTemplateItem = objUiCurrentRow.insertCell(objUiCurrentRow.cells.length);
        populateUiCellTemplateItem(objUiCellTemplateItem, objDataTemplateItem);
        
        // Display Template Item Separator
        if (templateCount % numTemplatesInARow != 0) {
            objUiCellTemplateItemSeparator = objUiCurrentRow.insertCell(objUiCurrentRow.cells.length);
            populateUiCellTemplateItemSeparator(objUiCellTemplateItemSeparator);
        }
        
        //Fill empty tds if applicable
        // @todo Separator Corresponding to the Template Item Separator need to be considered 
        if ((templateCount == resultCount) && (templateCount % numTemplatesInARow != 0)) {            
            for (var i = (templateCount % numTemplatesInARow); i < numTemplatesInARow; i ++) {
                objUiEmptyCell = objUiCurrentRow.insertCell(objUiCurrentRow.cells.length);
                objUiEmptyCell.innerHTML = '&nbsp;';
            }
        }
        
        // Display the Row Separator
        if (   (templateCount == resultCount) || templateCount %  numTemplatesInARow == 0) {
            var objUiRowSeparatorRow = objUiTemplateList.insertRow(objUiTemplateList.rows.length);
            var objUiCellSeparatorRow = objUiRowSeparatorRow.insertCell(objUiRowSeparatorRow.cells.length);
            populateUiCellSeparatorRow(objUiCellSeparatorRow);
            objUiCellSeparatorRow.height = 30;
            objUiCellSeparatorRow.align = 'left';
            objUiCellSeparatorRow.vAlign = 'top';
            objUiCellSeparatorRow.colSpan = (2 * numTemplatesInARow - 1);
            objUiCellSeparatorRow.innerHTML = '<img src="images/blank.gif" alt="" width="1" height="1" />';
        }
    }
    displayPager();
    blnTemplateListDisplayed = true;
    blnMainContentDisplayed = true;
}

function displayPager()
{
    var objUiPager = document.getElementById('pager');
    var strPagerLinksHTML = aPagedTemplateList.links;
    var strPagerHTML = '<span class="results">' + aPagedTemplateList.pagerDescription + '</span>';
    if (aPagedTemplateList.pager) {
        strPagerHTML += ' <span class="pageLinks"> '
            + strPagerLinksHTML
            + ' </span>'
    }
    objUiPager.innerHTML = strPagerHTML;
}

function displayFAQList()
{
    //INT.logMesage('displaying FAQ List');
    var objDataFAQItem = null;
    var objUiFaqQuestions = document.getElementById('tdFaqQuestions');
    var objUiFaqAnswers = document.getElementById('tdFaqAnswers');
    var faqSerial = 0;
    for (var index = 0, length = aAllFaqs.length; index < length; index ++) {
        objDataFaqItem = aAllFaqs[index];
        faqSerial =  index + 1;
        objUIFaqQuestion = document.createElement('h3');
        objUIFaqQuestionAnchor = document.createElement('a');
        objUIFaqQuestionAnchor.setAttribute('href', '#a' + faqSerial);
        objUIFaqQuestionAnchor.innerHTML = objDataFaqItem.question;
        objUIFaqQuestion.appendChild(objUIFaqQuestionAnchor);
        objUiFaqQuestions.appendChild(objUIFaqQuestion);
        // Done with Adding the UI for the Question
        objUIFaqAswerSectionQuestionAnchor = document.createElement('a');        
        objUIFaqAswerSectionQuestionAnchor.setAttribute('name', 'a' + faqSerial);
        objUIFaqAswerSectionQuestion = document.createElement('h4');
        objUIFaqAswerSectionQuestion.innerHTML = '<span>' + objDataFaqItem.question + '</span>';
        objUIFaqAswerSectionAnswer = document.createElement('h4');
        objUIFaqAswerSectionAnswer.innerHTML = objDataFaqItem.answer;
        
        objUiFaqAnswers.appendChild(objUIFaqAswerSectionQuestionAnchor);
        objUiFaqAnswers.appendChild(objUIFaqAswerSectionQuestion);
        objUiFaqAnswers.appendChild(objUIFaqAswerSectionAnswer);
    }
    blnFAQListDisplayed = true;
    blnMainContentDisplayed = true;
}

function displayContent()
{
    var objUiMainContent = document.getElementById('tdMainContent');
    objUiMainContent.innerHTML = aHTMLContent[currentUri.contentId];
    blnMainContentDisplayed = true;
}
/*
 * Parses and returns the HTML for the Cell where template Item is displayed
 *
 * @param  objDataTemplateItem an Object with the Properties of Template Item
 * @return string the HTML code
 */
function parseTemplateItem(objDataTemplateItem)
{
    var urlTemplateViewPage = INT_TK_WEBROOT + '/' + objDataTemplateItem.sef_view_class_name
                                + '/premiumtemplates/' +  objDataTemplateItem.template_id
                                + '/category/' +  objDataTemplateItem.template_category_sef_alias
                                + '/tkp/' +  INT_TK_AFF_ID + '/';
    var urlTemplateBuyPage = INT_TK_WEBROOT
                                + '/Cart/action/add/templateId/' +  objDataTemplateItem.template_id
                                + '/tkp/' +  INT_TK_AFF_ID + '/';
    var oCategoryUrlParams = {
        category: objDataTemplateItem.template_category_sef_alias,
        templateType: 'web-templates'
    }
    var urlTemplateCategory = INT.Uri.makeUrlQueryString(oCategoryUrlParams);
    strHTML = '';
    strHTML +=
      '<table width="100%" border="0" cellspacing="0" cellpadding="0">'
        + '<tr>'
            + '<td align="left" valign="bottom"><a '
   + ' title="' + objDataTemplateItem.template_category_title + ' ' 
            + objDataTemplateItem.template_type_title_singular + ' ' 
            + objDataTemplateItem.template_code_uc + '"'
   + ' href="' + urlTemplateViewPage + '"><img'
   + ' alt="' + objDataTemplateItem.template_category_title + ' ' 
            + objDataTemplateItem.template_type_title_singular + ' ' 
            + objDataTemplateItem.template_code_uc + '"'
   + ' src="' + INT_TK_WEBROOT + '/' + objDataTemplateItem.template_image_thumbnail + '"'
   + ' width="144" /></a></td>'
        + '</tr>'
        + '<tr>'
            + '<td align="left" valign="top">'
                + '<ul class="designDetails">'
                    + '<li>' + objDataTemplateItem.template_type_title_singular + '</li>'
                    + '<li>Category: <a '
   + ' href="' + urlTemplateCategory + '"'
   + ' title="' + objDataTemplateItem.template_category_title + ' ' 
        + objDataTemplateItem.template_type_title + '"'
   + '>' + objDataTemplateItem.template_category_title + '</a></li>'
                    + '<li>Code: <span>' + objDataTemplateItem.template_code_uc + '</span></li>'
                    + '<li>Price: <span>' + smartTemplatePrice(objDataTemplateItem) + '</span></li>'
                + '</ul>'
                + '<ul class="buy">'
                    + '<li><a href="' + urlTemplateViewPage + '" class="previewIcon">Preview</a></li>'
                    + '<li>|</li>'
                    + '<li><a href="' + urlTemplateBuyPage + '" class="buyIcon">Buy Now</a></li>'
                + '</ul>'
            + '</td>'
        + '</tr>'
    + '</table>';
    return strHTML;
}

/*
 * Sets the attribute for the Cell where the individual Template Item is displayed..
 *
 * @param  objUiCellTemplateItem HTML TableCell Object
 * @param  objDataTemplateItem an Object with the Properties of Template Item
 * @return void
 */
function populateUiCellTemplateItem(objUiCellTemplateItem, objDataTemplateItem)
{
    objUiCellTemplateItem.width = 144;
    objUiCellTemplateItem.align = 'left';
    objUiCellTemplateItem.vAlign = 'bottom';
    objUiCellTemplateItem.innerHTML = parseTemplateItem(objDataTemplateItem);
}

function populateUiCellTemplateItemSeparator(objUiCellTemplateItemSeparator)
{
    objUiCellTemplateItemSeparator.width = 20;
    objUiCellTemplateItemSeparator.align = 'left';
    objUiCellTemplateItemSeparator.vAlign = 'top';
    objUiCellTemplateItemSeparator.innerHTML = 
        '<img src="images/blank.gif" alt="" width="1" height="1" />';
}

function populateUiCellSeparatorRow(objUiCellSeparatorRow)   
{    
    objUiCellSeparatorRow.height = 30;
    objUiCellSeparatorRow.align = 'left';
    objUiCellSeparatorRow.vAlign = 'top';
    objUiCellSeparatorRow.colSpan = (2 * numTemplatesInARow - 1);
    objUiCellSeparatorRow.innerHTML = '<img src="images/blank.gif" alt="" width="1" height="1" />';
}

function checkVar(what)
{
    return Boolean(typeof what != 'undefined' && what);
}

function smartTemplatePrice(objDataTemplateItem)
{
    if (objDataTemplateItem.is_free == "1") {
        return '<b>Free</b>';
    } else {
        return 'US$ ' + objDataTemplateItem.template_price;
    }
}

function correctTreeMenu()
{
    if (!blnMenuCorrected) {
        var lastNodeIndex = -1;
        var objPanel = document.getElementById('typeArea');
        var arrPanelObjects = objPanel.childNodes;
        for (var i=0; i <arrPanelObjects.length; i++) 
        {
            if (arrPanelObjects[i].nodeName == 'UL') 
            {
                arrList = arrPanelObjects[i].getElementsByTagName('ul');
                for (var j=0; j<arrList.length; j++) 
                {
                    arrListElements = arrList[j].getElementsByTagName('li');
                    if (arrListElements) 
                    {
                        lastNodeIndex = arrListElements.length - 1;
                        if (lastNodeIndex >= 0) 
                        {
                            arrListElements[lastNodeIndex].className = 'last';
                        }
                    }
                }
            }
        }
    }
    blnMenuCorrected = true;
}
