﻿/*

You may use any of these common functions

    isIe()

    initValidators(inputSet)
    setInputError(inputId, message)
    clearInputError(inputId)

    showSuccess(text)
    showError(text)
    showWarning(text)
    hideSystemMessage()

*/

RemoveTimeOut = 25000; //temporal fix
common.RemoveTimeOut = 25000;
common.LoadingTimeOut = 2000;
var loadingFlag;
var UIValidationEnabled = true;
var validators = {};
var baseController = null;

function isIe () {
//    return navigator.appName==="Microsoft Internet Explorer";
// $.browser.version < 8
    return (typeof $.browser.msie !== 'undefined');
}

// initialize validators
function initValidators(inputSet) {
    for (var inputId in inputSet) {
        var input = $("#" + inputId);
        if (input.length > 0 && inputSet[inputId].length > 0) {
//            if (isIe() && input[0].parentNode.parentNode.className.indexOf("select")<0){
//                $(input).click(function () {
//                    this.blur();
//                    this.focus();                    
//                });
//            }
            $(input).blur(function (e) {
                var inputId = e.currentTarget.id;
                $(this).val(trim($(this).val()));
                var validators = inputSet[inputId];
                _validate(inputId, validators);
            })
        }
    }
}

// main validation method
function _validate(inputId,validators) {
    clearInputError(inputId);
    for (var i=0;i<validators.length;i++) {
        var el = validators[i];

        var input = $("#" + inputId);
        if (!el.validator(input, el.param, el.message)) {
            setInputError(inputId, el.message)
            return false;
        }
    }
    return true;
}


/*
     DISPLAY/HIDE INPUT ERROR
*/

function setInputError(inputId, message) {
    var labelPattern = 'label[for="' + inputId + '"]';
    var spanPattern = 'label[for="' + inputId + '"] > span > span.error';
    var labelElement = $(labelPattern)[0];
    var spanElement = $(spanPattern)[0];

    addClassName(labelElement,"error");
    if (spanElement) {
        spanElement.innerHTML = message;
    }
}

function clearInputError(inputId) {
    var labelPattern = 'label[for="' + inputId + '"]';
    var spanPattern = 'label[for="' + inputId + '"] > span > span.error';
    var labelElement = $(labelPattern)[0];
    var spanElement = $(spanPattern)[0];

    removeClassName(labelElement,"error");
    if (spanElement) {
        spanElement.innerHTML = "";
    }
}


/*
     VALIDATORS
*/

function textValidator(input, param) {
    var regExp = new RegExp(param);
    return regExp.test($(input).val());
}

function maxLengthValidator(input, param) {
    var maxVal = parseInt(param);
    return !maxVal || maxVal >= $(input).val().length;
}

function minLengthValidator(input, param) {
    var minVal = parseInt(param);
    return !minVal || minVal <= $(input).val().length;
}

function maxValueValidator(input, param) {
    var maxVal = parseInt(param);
    return !maxVal || maxVal >= $(input).val();
}

function minValueValidator(input, param) {
    var minVal = parseFloat(param);
    return !minVal || minVal <= $(input).val();
}

function emptyStringValidator(input) {
    return $(input).val().length != 0;
}

function DDLValidator(input) {
    return $(input).val() != 0;
}



/*
     DISPLAY/HIDE THE SERVER ERROR
*/

// todo: optimize this
function _showSystemMessage(mText, mClass) {
    hideSystemMessage();
    var messageBlock = $("#systemMessage")[0];
    var textContainer = $("#systemMessage > span")[0];
    textContainer.innerHTML = mText;
    if (f_scrollTop() > 100) {
        window.scroll(0,100);
    }
    addClassName(messageBlock,mClass);
    setTimeout(hideSystemMessage, common.RemoveTimeOut);
}
function hideSystemMessage() {
    var messageBlock = $("#systemMessage")[0];
    removeClassName(messageBlock,common.SUCCESS_CLASS);
    removeClassName(messageBlock,common.ERROR_CLASS);
    removeClassName(messageBlock,common.WARNING_CLASS);
}
function showSuccess(text) {
    _showSystemMessage(text, common.SUCCESS_CLASS);
}
function showError(text) {
    _showSystemMessage(text, common.ERROR_CLASS);
}
function showWarning(text) {
    _showSystemMessage(text, common.WARNING_CLASS);
}



/*  Table
===================================================================================
*/

function fnGetSelected(oTableLocal, rowId) {
    var aReturn = new Array();
    var aTrs = oTableLocal.fnGetNodes();
    for (var i = 0; i < aTrs.length; i++) {
        if (aTrs[i].id == 'tr_' + rowId) {
            aReturn.push(aTrs[i]);
        }
    }
    return aReturn;
}



/* Dialog
===================================================================================
*/

function CloseDialog(elem) {
    elem.className = "dialog hidden";
}



/*  Show/Hide DOM elements
===================================================================================
*/

function showElement(elem) {
    removeClassName("hidden");
}


/*  Show/Hide loading animate
===================================================================================
*/

function showLoading() {
    loadingFlag = true;
    setTimeout(function () {
        if (loadingFlag == true) {
            removeClassName(document.getElementById('loading'), "hidden")
        }
    }, common.LoadingTimeOut);    
}

function hideLoading() {   
    loadingFlag = false;
    addClassName(document.getElementById('loading'), "hidden");    
}

/* Color DDL
===================================================================================
*/

/*
function fillColorList(elemId) {
    var color = document.getElementById(elemId);
    var count_color = color.length;
    for (i = 0; i < count_color; i++) {
        var color_name = color[i].value;
        var temp = new Array();
        temp = color_name.split('_');
        var count = temp.length;        
        color.options[i].style.backgroundColor = temp[count - 1];
    }

    var option = color.options[color.selectedIndex].style.backgroundColor;
    color.style.backgroundColor = option;
}
*/

function change_color(elem) {
    var option = elem.options[elem.selectedIndex].style.backgroundColor;
    elem.style.backgroundColor = option;
}

/*
  ===================================================================================
  */

function setInnerHTML(element, value) {
    if (!element) return;
    element.innerHTML = (value == null) ? "" : value;
    return element;
}

function addClassName(element, className) {
//    if (!element) return;
    $(element).addClass(className);
    return element;
}

function removeClassName(element, className) {
    if (!element) return;
    element.className = element.className.replace(new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ');
    return element;
}

function trim(str) {
    return(str.replace(/^\s+|\s+$/g, ''));
}


/*
  =============  BUTTONS  ============
  */

function disableButton(button) {
    addClassName(button,"disabled");
    button.setAttribute("disabled","disabled");
}

function enableButton(button) {
    removeClassName(button,"disabled");
    button.removeAttribute("disabled");
}

function enableDOMElement(el) {
    removeClassName(el,"disabled");
    el.removeAttribute("disabled");
}
function disableDOMElement(el) {
    addClassName(el,"disabled");
    el.setAttribute("disabled","disabled");
}




/*
  =============  SERVER INTERACTION  ============
  */

function _serverCall(controllerURL, options, callback, type){
    $.post(controllerURL, options, callback, type);
}

function ajaxJSONUpdate(action, options, callback) {    
    showLoading();
    var controllerURL = "/" + baseController + "/" + action;
    _serverCall(controllerURL, options, callback, 'json');        
}


/*
  =============  FORMS  ============
  */

function submitForm(formId) {
    var form = $("#"+formId)[0];
    form.submit();
}

function login() {
    document.location.href = '/Account/LoginRegister';
}


//  form actions

function saveUser() {
    submitForm("editUserForm")
    return null;
}

function coachRequest() {
    submitForm("coachRequestForm");
}

function saveTeam() {
    submitForm("editTeamForm");
    return null;
}

function approveOrder() {
    submitForm("editOrderForm");
    return null;
}

function saveProduct() {
    submitForm("editProductForm");
    return null;
}

function createCatalog() {
    submitForm("createCatalogDialogForm");
    return null;
}

function createTeam() {
    submitForm("createTeamDialogForm");
    return null;
}

function ViewOrder(SalesCoach) {        
    if (SalesCoach == 1) $('#SalesCoach').val('Coach');
    else
        if (SalesCoach == 2) $('#SalesCoach').val('Sales');
        else
            if (SalesCoach == 3) $('#SalesCoach').val('Deliv');    
    submitForm("manageOrdersForm");
    return null;
}

/*
  ========================  USER MENU  =========================
  */ 

function UserMenuAction(actionName, controllerName, parameterName) {
	if ((parameterName == undefined) || (parameterName == ''))
		document.location.href = '/' + controllerName + '/' + actionName;
	else
		document.location.href = '/' + controllerName + '/' + actionName + '/' + parameterName;
}



/*  OTHER
===================================================================================
*/

function _createHTMLElement(eName,eClass,eText,eWidth,eHeight) {
    var el = document.createElement(eName);
    el.className = eClass;
    if (eText) {
        el.appendChild(document.createTextNode(eText));
    }
    if (eWidth) {
        el.style.width = eWidth;
    }
    if (eHeight) {
        el.style.height = eHeight;
    }
    return el;
}



function f_clientWidth() {
	return f_filterResults (
		window.innerWidth ? window.innerWidth : 0,
		document.documentElement ? document.documentElement.clientWidth : 0,
		document.body ? document.body.clientWidth : 0
	);
}
function f_clientHeight() {
	return f_filterResults (
		window.innerHeight ? window.innerHeight : 0,
		document.documentElement ? document.documentElement.clientHeight : 0,
		document.body ? document.body.clientHeight : 0
	);
}
function f_scrollLeft() {
	return f_filterResults (
		window.pageXOffset ? window.pageXOffset : 0,
		document.documentElement ? document.documentElement.scrollLeft : 0,
		document.body ? document.body.scrollLeft : 0
	);
}
function f_scrollTop() {
	return f_filterResults (
		window.pageYOffset ? window.pageYOffset : 0,
		document.documentElement ? document.documentElement.scrollTop : 0,
		document.body ? document.body.scrollTop : 0
	);
}
function f_filterResults(n_win, n_docel, n_body) {
	var n_result = n_win ? n_win : 0;
	if (n_docel && (!n_result || (n_result > n_docel)))
		n_result = n_docel;
	return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
}


jQuery.fn.center = function () {
    this.css("position","absolute");
//    this.css("top", (($(window).height() - this.outerHeight()) / 2) + $(window).scrollTop() + "px");
    this.css("left", (($(window).width() - this.outerWidth()) / 2) + $(window).scrollLeft() + "px");
    return this;
}


/*
  ========================  INIT  =========================
  */
common.init = function () {

    // simulate buttons pressing
    var _buttons = document.getElementsByTagName("button");
    for (var i=0;i<_buttons.length;i++){
        $(_buttons[i]).bind( 'mousedown', function(evt){ $(this).addClass('pressed'); }).bind('mouseup', function(evt) { $(this).removeClass('pressed'); });
    }

    // init sub-menu
    var subMenu = $("#userMenu .sub")[0];
    var manage = $("#userMenu .sub")[0];
    $("#mnManage").bind('mouseover', function(evt){ $(subMenu).addClass('overed'); }).bind('mouseout', function(evt) { $(subMenu).removeClass('overed'); });

    // clear the system message if we got it from the server
//    setTimeout(hideSystemMessage, common.RemoveTimeOut);  //todo: needs improvement. Other dynamic messages may be closed before they appear.
}

$(document).ready(common.init);



